還原二叉樹(25 分)
阿新 • • 發佈:2018-12-03
給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。
輸入格式:
輸入首先給出正整數N(≤50),為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為N的不包含重複英文字母(區別大小寫)的字串。
輸出格式:
輸出為一個整數,即該二叉樹的高度。
輸入樣例:
9
ABDFGHIEC
FDHGIBEAC
輸出樣例:
5
#include <iostream> #include<vector> #include <stdlib.h> #include<algorithm> #define NIL -1 using namespace std; char a[10000],b[10000]; struct tree{ char data; struct tree *left,*right; }; struct tree *rec(int q,int z,int n) { int i,j,k; if(n<=0) return NULL; struct tree *T; T=(struct tree *)malloc(sizeof(struct tree)); char root=a[q]; T->data=a[q]; for(i=0;b[z+i]!=root;i++); T->left=rec(q+1,z,i); T->right=rec(q+i+1,z+i+1,n-i-1); return T; } int height(struct tree *T) { if(!T) return 0; int hl=height(T->left); int hr=height(T->right); return hr>hl? hr+1:hl+1; } int main() { int i,j,n; scanf("%d",&n); getchar(); for(i=0;i<n;i++) { scanf("%c",&a[i]); } getchar(); for(i=0;i<n;i++) { scanf("%c",&b[i]); } struct tree *T=rec(0,0,n); int h=height(T); printf("%d",h); }