数据结构实验之二叉树四:还原二叉树
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入
输入数据有多组,每组数据第一行输入
1
个正整数
N(1 <= N <= 50)
为树中结点总数,随后
2
行先后给出先序和中序遍历序列,均是长度为
N
的不包含重复英文字母
(
区分大小写
)
的字符串。
输出
输出一个整数,即该二叉树的高度。
示例输入
9 ABDFGHIEC FDHGIBEAC
示例输出
5
提示
来源
#include<bits/stdc++.h>
using namespace std;
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
char a[55],b[55];
struct BiTNode *CreateBiTree(char a[],char b[],int n)//还原建立二叉树
{
BiTree root;
if(n==0) return NULL;
char *p;
root=(BiTNode *)malloc(sizeof(BiTNode ));
if(!root) return NULL;
root->data=a[0];
for(p=b;p!='\0';p++)
{
if(*p==a[0])
break;
}
int t;
t=p-b;
root->lchild=CreateBiTree(a+1,b,t);
root->rchild=CreateBiTree(a+t+1,p+1,n-t-1);
return root;
} ;
int deepth(BiTree root)//深度遍历
{
int deep=0;
if(root)
{
int leftChildDeep = deepth(root->lchild);
int rightChildDeep = deepth(root->rchild);
if(leftChildDeep>rightChildDeep)
deep=leftChildDeep+1;
else
deep=rightChildDeep+1;
}
return deep;
}
int main()
{
int n;
int d;
BiTree root;
while(cin>>n)
{
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int j=0;j<n;j++)
{
cin>>b[j];
}
root = CreateBiTree(a,b,n);
d = deepth(root);
cout<<d<<endl;
}
}