作者 DS课程组
单位 浙江大学
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入格式:
输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。
输出格式:
输出为一个整数,即该二叉树的高度。
输入样例:
9
ABDFGHIEC
FDHGIBEAC
输出样例:
5
参考代码:C(gcc)
#include<stdio.h>
int max(int a,int b)
{return a>b?a:b;}
int dfs(char *pre, char *in,int n){//求二叉树的高度
if(n==0)return 0;//若没有结点,为空树
int i;
for(i=0;i<n;i++)
if(in[i]==pre[0])break;//找到根结点在中序的位置
int left=dfs(pre+1,in,i); //左子树的深度
int right=dfs(pre+i+1,in+i+1,n-i-1);//右子树的深度
return max(left,right)+1;//返回左右子树深度的较大值中的较大值+根结点
}
int main(){
int n;
scanf("%d",&n);
char pre[n+1],in[n+1];//先序和中序
scanf("%s%s",pre,in);
printf("%d\n",dfs(pre,in,n));
return 0;
}
简要分析:题目——已知先序序列、中序序列,求二叉树的高度递归。每次函数传的参数是树的根节点和树在先序和中序序列中的元素。最后递归的结束条件是,子树长度为零,即子树为空。