数据结构实验之二叉树四:(先序中序)还原二叉树
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
Output
输出一个整数,即该二叉树的高度。
Example Input
9 ABDFGHIEC FDHGIBEAC
Example Output
5
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef struct BiTNode
{
char data;
BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree creat(int n,char a[],char b[])
{
BiTree root;
char *p;
if(n==0)
return NULL;
root=(BiTree)malloc(sizeof(BiTNode));
root->data=a[0];
for(p=b;p!='\0';p++)
if(*p==a[0])
break;
int t;
t=p-b;
root->lchild=creat(t,a+1,b);
root->rchild=creat(n-t-1,a+t+1,p+1);
return root;
};
int deep(BiTree root)
{
int d=0;
if(root)
{
int l1=deep(root->lchild);
int l2=deep(root->rchild);
d=l1>l2?l1+1:l2+1;
}
return d;
}
int main()
{
int n,m;
char a[100],b[100];
while(cin >> n)
{
BiTree root;
cin >> a;
cin >> b;
root=creat(n,a,b);
m=deep(root);
cout << m << endl;
}
return 0;
}