#include<stdio.h>
#include<stdlib.h>
typedef char ElemType; //结点类型为char
typedef struct node
{
ElemType data;
struct node *LC;
struct node *RC;
}*Btree;
int max(int a,int b) //返回两个整数中的较大者
{
if(a>b) return a;
else return b;
}
Btree hy(ElemType xx[],ElemType zx[],int len)
{//xx[]:先序遍历序列 zx:中序遍历序列 len:长度
Btree T;
int i=0;
if(!len) return NULL; //递归结束条件:序列长度为0
else
{
T=(Btree)malloc(sizeof(struct node));//生成T结点
T->data=xx[0]; //先序第一个结点为根结点
while(zx[i]!=xx[0]) i++;
T->LC=hy(xx+1,zx,i); //递归求根结点左子树
T->RC=hy(xx+i+1,zx+i+1,len-i-1);//递归求根结点右子树
}
return T;
}
int High(Btree T) //求树的高度
{
int L,R,H; //L:左子树高度 R:有字数高度 H:树的高度
if(T==NULL) return 0;
else
{
L=High(T->LC);
R=High(T->RC);
H=max(L,R);
H++;//树的高度要+1
}
return H;
}
int main()
{
int n;
ElemType xx[105],zx[105];
Btree T;
scanf("%d",&n);
scanf("%s",xx);
scanf("%s",zx);
T=hy(xx,zx,n);
printf("%d",High(T));
}
根据先序和中序遍历还原二叉树并求其高度
最新推荐文章于 2020-11-18 00:13:15 发布