给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入格式:
输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。
输出格式:
输出为一个整数,即该二叉树的高度。
输入样例:
9
ABDFGHIEC
FDHGIBEAC
输出样例:
5
#include<bits/stdc++.h>
using namespace std;
// 求二叉树的高度
int getHeight(char pre[], char in[], int n)
{
// 若没有结点,为空树(递归到空子树开始累加高度)
if(n == 0) return 0;
// 找到根结点在中序的位置
int i;
for(i = 0; i < n && pre[0] != in[i]; ++i);
// pre+1是跳过先序第一个根节点的左子树首元素位置 in是中序左子树首元素位置 i是左子树集的个数
int left = getHeight(pre + 1, in, i);
// 先、中序的右子树
int right = getHeight(pre + 1 + i, in + i + 1, n - i - 1);
//返回 该树高度 = 左右子树深度的较大值 + 根节点(+1)
return max(left, right) + 1;
}
main()
{
int n; cin >> n;
char pre[n+1], in[n+1];
cin >> pre >> in;
cout << getHeight(pre, in, n);
}
参考代码?参考讲解
|