数据结构实验之二叉树四:还原二叉树
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入
输入数据有多组,每组数据第一行输入
1
个正整数
N(1 <= N <= 50)
为树中结点总数,随后
2
行先后给出先序和中序遍历序列,均是长度为
N
的不包含重复英文字母
(
区分大小写
)
的字符串。
输出
输出一个整数,即该二叉树的高度。
示例输入
9 ABDFGHIEC FDHGIBEAC
示例输出
5
提示
#include<iostream>
#include<cstring>
using namespace std;
struct Tnode
{
char d;
Tnode *l,*r;
};
Tnode *CreatTree(char pre[],char in[],int len)
{
if(len<=0)
return NULL;
int i;
for( i=0;i<len;i++)
if(*pre==in[i])
break;
Tnode *p=new Tnode;
p->d=*pre;
p->l=CreatTree(pre+1,in,i);
p->r=CreatTree(pre+i+1,in+i+1,len-i-1);
return p;
}
int DeepT(Tnode *p)
{
if(!p)
return 0;
else
{
int l=DeepT(p->l)+1;
int r=DeepT(p->r)+1;
return l>r?l:r;
}
}
int main()
{
int n;
while(cin>>n)
{
char st1[60],st2[60];
cin>>st1>>st2;
Tnode *root;
root=CreatTree(st1,st2,n);
cout<<DeepT(root)<<endl;
}
return 0;
}