数据结构实验之二叉树四:还原二叉树
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
Hint
Author
xam
#include<stdio.h> typedef struct tree { char data; tree * l,*r; }tree; tree * creat(char a[],char b[],int n) { tree * p; char * q; if(n==0) return NULL; else { p=new tree; p->data=a[0]; for(q=b;q!='\0';q++) { if(*q==a[0]) break; } int t; t=q-b; p->l=creat(a+1,b,t); p->r=creat(a+t+1,q+1,n-t-1); } return p; } int deep(tree * p) { int d=0,dl,dr; if(p) { dl=deep(p->l); dr=deep(p->r); d=dl>dr?dl+1:dr+1; } return d; } int main() { int n; tree * p; char a[100],b[100]; while(scanf("%d",&n)!=EOF) { scanf("%s%s",a,b); p=creat(a,b,n); printf("%d\n",deep(p)); } return 0; }