用C语言实现:给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。 输入格式: 输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。 输出格式: 输出为一个整数,即该二叉树的高度。
时间: 2023-06-17 22:06:30 浏览: 94
以下是用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct TreeNode *Tree;
struct TreeNode {
char val;
Tree left;
Tree right;
};
Tree buildTree(char* preOrder, char* inOrder, int len) {
if (len == 0) return NULL;
Tree root = (Tree)malloc(sizeof(struct TreeNode));
root->val = preOrder[0];
int rootIndex = 0;
for (int i = 0; i < len; i++) {
if (inOrder[i] == root->val) {
rootIndex = i;
break;
}
}
root->left = buildTree(preOrder + 1, inOrder, rootIndex);
root->right = buildTree(preOrder + rootIndex + 1, inOrder + rootIndex + 1, len - rootIndex - 1);
return root;
}
int getHeight(Tree root) {
if (root == NULL) return 0;
int leftHeight = getHeight(root->left);
int rightHeight = getHeight(root->right);
return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
}
int main() {
int n;
scanf("%d", &n);
char* preOrder = (char*)malloc(sizeof(char) * n);
char* inOrder = (char*)malloc(sizeof(char) * n);
scanf("%s", preOrder);
scanf("%s", inOrder);
Tree root = buildTree(preOrder, inOrder, n);
printf("%d", getHeight(root));
return 0;
}
```
首先定义了一个二叉树的结构体 `TreeNode` 和一个二叉树的指针类型 `Tree`。`buildTree` 函数用于从先序遍历序列和中序遍历序列中构建出一棵二叉树,返回该二叉树的根节点。`getHeight` 函数用于计算二叉树的高度,返回二叉树的高度。
在 `main` 函数中,首先读入结点总数 `n`,然后分别读入先序遍历序列和中序遍历序列。接着调用 `buildTree` 函数构建出一棵二叉树,并调用 `getHeight` 函数计算出该二叉树的高度,最后输出该二叉树的高度。
阅读全文