已知一顆二叉樹的中序遍歷序列和后序遍歷序列,求二叉樹的深度。
輸入數據有多組,輸入T,代表有T組數據。每組數據包括兩個長度小于50的字符串,第一個字符串表示二叉樹的中序遍歷,第二個表示二叉樹的后序遍歷。
2dbgeafcdgebfcalnixulinuxExample Output
43
#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct node{ char data; struct node *lc,*rc;}bitree;int max;bitree * create(int zlen,char hst[51], char zst[51]){ if(zlen<=0) return NULL; int i; bitree * t; t=(bitree *)malloc(sizeof(bitree)); t->data=hst[0]; for(i=0;i<zlen;i++) { if(zst[i]==hst[0]) break; } t->lc=create(i,hst-zlen+i,zst); t->rc=create(zlen-i-1,hst-1,zst+i+1); return t;}void pre_show(int count,bitree * t){ int k; if(t) { if(count==0) count=1; k=count; if(k>max) max=k; pre_show(++k,t->lc); pre_show(++count,t->rc); }}int main(){ int zlen,hlen,t; char zst[51],hst[51]; bitree * tree; scanf("%d",&t); while(t--) { max=0; scanf("%s%s",zst,hst); zlen=strlen(zst); hlen=strlen(hst); tree=create(zlen,hst+hlen-1,zst); pre_show(0,tree); printf("%d/n",max); } return 0;}
新聞熱點
疑難解答