给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。 输入格式: 输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。 输出格式: 输出为一个整数,即该二叉树的高度(用c语音
时间: 2023-07-24 19:10:17 浏览: 102
下面是一种解决该问题的算法实现,使用了递归的思想:
```
#include <stdio.h>
#include <string.h>
#define MAXN 50
char pre_order[MAXN + 1], in_order[MAXN + 1];
int build_tree(int pre_l, int pre_r, int in_l, int in_r)
{
if (pre_l > pre_r) return 0;
int root = pre_l;
while (in_order[root] != pre_order[root]) root++;
int left_size = root - in_l;
int left_height = build_tree(pre_l + 1, pre_l + left_size, in_l, root - 1);
int right_height = build_tree(pre_l + left_size + 1, pre_r, root + 1, in_r);
return (left_height > right_height ? left_height : right_height) + 1;
}
int main()
{
int n;
scanf("%d", &n);
scanf("%s%s", pre_order, in_order);
int height = build_tree(0, n - 1, 0, n - 1);
printf("%d\n", height);
return 0;
}
```
算法说明:
build_tree函数用于递归构建二叉树,并返回该子树的高度。具体而言,它首先计算出当前子树的根节点在先序遍历序列中的位置root,然后根据root将中序遍历序列分为左子树和右子树两个部分,分别递归构建这两个子树,并分别得到它们的高度left_height和right_height。最终返回值为左右子树高度的较大值加上1。
主函数中读入数据后,调用build_tree函数计算二叉树的高度,并输出结果。
阅读全文