還原二叉樹

7-1 還原二叉樹 (25 分) 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。node

輸入格式:字符串

輸入首先給出正整數N(≤50),爲樹中結點總數。下面兩行前後給出先序和中序遍歷序列,均是長度爲N的不包含重複英文字母(區別大小寫)的字符串。io

輸出格式:class

輸出爲一個整數,即該二叉樹的高度。二叉樹

輸入樣例:遍歷

9 ABDFGHIEC FDHGIBEAC 輸出樣例:英文

5di

#include<stdio.h> #include<stdlib.h> #define MAX 50 typedef char ElemType; typedef struct node *Bintree; struct node { ElemType data; Bintree Left; Bintree Right; }; Bintree Recover(ElemType Pre[],ElemType In[],int len) { Bintree T; int i; if(!len) return NULL; else { T=malloc(sizeof(struct node)); T->data=Pre[0]; for(i=0;i<len;i++) { if(Pre[0]==In[i]) break; } T->Left=Recover(Pre+1,In,i); T->Right=Recover(Pre+1+i,In+i+1,len-i-1); } return T; } int GetHigh(Bintree T) { int HL,HR,MaxH=0; if(T){ HL=GetHigh(T->Left); HR=GetHigh(T->Right); MaxH=HL>HR?HL:HR; return (MaxH+1); } else return 0; } int main() { Bintree Tree; ElemType Preorder[MAX+1],Inorder[MAX+1]; int N,H; scanf("%d",&N); scanf("%s",Preorder); scanf("%s",Inorder); Tree=Recover(Preorder,Inorder,N); H=GetHigh(Tree); printf("%d\n",H); return 0; }co

相關文章
相關標籤/搜索