还原二叉树
还原二叉树
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入格式:
输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。
输出格式:
输出为一个整数,即该二叉树的高度。
输入样例:
9
ABDFGHIEC
FDHGIBEAC
输出样例:
5
1 #include<stdio.h> 2 3 4 void Input(int A[],int N){ 5 for(int i = 0; i < N; i++){ 6 char a; 7 scanf("%c",&a); 8 //printf("%c",a); 9 A[i] = a - 'a'; 10 } 11 } 12 int FindTreeHeight(int pre[],int in[],int N,int Lp,int Li){ 13 if(N == 0) return 0; 14 int i; 15 for(i = Li; i < Li + N; i++){ 16 if(in[i] == pre[Lp]) break; 17 } 18 int NL = i - Li; 19 int NR = Li + N - 1 - i; 20 //printf("%d %d %d %d\n",N,i,pre[Lp],in[i]); 21 int HL = FindTreeHeight(pre,in,NL,Lp+1,Li); 22 int HR = FindTreeHeight(pre,in,NR,Lp+NL+1,Li+NL+1); 23 int res = HL > HR ? HL+1:HR+1; 24 return res; 25 } 26 int main(){ 27 int N; 28 scanf("%d",&N); 29 int pre[N]; 30 int in[N]; 31 getchar(); 32 Input(pre,N); 33 getchar(); 34 Input(in,N); 35 int Height = FindTreeHeight(pre,in,N,0,0); 36 printf("%d",Height); 37 38 return 0; 39 }