数据结构实验之二叉树四:(先序中序)还原二叉树
来源:互联网 发布:淘宝网返利网 编辑:程序博客网 时间:2024/06/08 07:13
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
Output
输出一个整数,即该二叉树的高度。
Example Input
9 ABDFGHIECFDHGIBEAC
Example Output
5
通过先序遍历序列和中序遍历序列还原二叉树,先序遍历序列的第一个值肯定为根结点,在中序遍历序列中找到该值,该值的左侧所有的值即为左子树,右侧为右子树,后分别对左侧和右侧进行递归。
代码:
#include <bits/stdc++.h>
#include <string.h>
using namespace std;
int cnt, k, n;
char a[51], b[51];
struct node
{
char data;
struct node *l, *r;
};
struct node *create(char a[], char b[], int n)
{
struct node *root;
root = (struct node*)malloc(sizeof(struct node));
if(n==0)
return NULL;
root->data = a[0];
char *p;
for(p=b; p!='\0'; p++) // 在中序遍历序列中找到先序遍历序列的第一个值(根结点)
if(*p==a[0])
break;
int t;
t=p-b; //t为左侧子树包含的结点个数
root->l=create(a+1, b, t); //对根结点左侧序列进行遍历
root->r=create(a+t+1, p+1, n-t-1); //对根结点右侧序列进行遍历
return root;
}
int deep(struct node *root)
{
int d=0;
if(root)
{
int l1=deep(root->l);
int l2=deep(root->r);
if(l1>l2)
d=l1+1;
else d=l2+1;
}
return d;
}
int main()
{
while(~scanf("%d", &n))
{
scanf("%s", a);
scanf("%s", b);
struct node *root;
root = create(a, b, n);
int m;
m = deep(root);
cout << m << endl;
}
return 0;
}
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- SDUT3343数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- SDUT3343数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- python random
- Educational Codeforces Round 903E
- 欢迎使用CSDN-markdown编辑器
- linux c检测USB热插拔(netlink)
- 【Maven】maven的依赖
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- python基础
- 欢迎使用CSDN-markdown编辑器
- 在O(1)时间删除链表节点
- 在bibtex下引用arXiv的文献格式是什么?
- spring AOP 之 注解 配置实现(附 Java 代码实例)
- Git和TortoiseGit安装
- SYD8801蓝牙profile(UUID)的使用说明
- 将word文档转换为图片格式的PDF