还原二叉树

 还原二叉树

给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。

输入格式:

输入首先给出正整数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 }
 

猜你喜欢

转载自www.cnblogs.com/jinjin-2018/p/9147931.html