Problem Descriptionnode
給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。
Inputide
輸入數據有多組,每組數據第一行輸入1個正整數N(1 <= N <= 50)爲樹中結點總數,隨後2行前後給出先序和中序遍歷序列,均是長度爲N的不包含重複英文字母(區分大小寫)的字符串。3d
Outputcode
輸出一個整數,即該二叉樹的高度。
Sample Inputblog
9
ABDFGHIEC
FDHGIBEAC
Sample Output圖片
5ip
#include<stdio.h> #include<stdlib.h> struct node { char data; struct node *l,*r; }; struct node *creat(int n,char a[],char b[]) { struct node *root; char *p; if(n==0) return NULL; root=(struct node *)malloc(sizeof(struct node)); root->data=a[0]; for(p=b;p!='\0';p++) { if(*p==a[0]) { break; } } int t; t=p-b; root->l=creat(t,a+1,b); root->r=creat(n-t-1,a+t+1,p+1); return root; }; int deep(struct node *root) { int d=0; if(root) { int l1=deep(root->l); int l2=deep(root->r); if(l1>l2) { d=l1+1; } else { d=l2+1; } } return d; } int main() { int n,m; char a[100],b[100]; while(scanf("%d",&n)!=EOF) { struct node *root; scanf("%s",a); scanf("%s",b); root=creat(n,a,b); m=deep(root); printf("%d\n",m); } return 0; }