还原二叉树

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

相关文章
相关标签/搜索