写一个c语言程序,给定一个二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度
时间: 2024-10-29 14:09:32 浏览: 46
在C语言中,我们可以利用先序遍历和中序遍历重建二叉树,并通过递归的方式计算其高度。这里首先需要将两个序列恢复成二叉树结构,然后计算高度。以下是步骤和伪代码:
1. 先序遍历(根-左-右):
- 第一个元素是根节点值
- 中序遍历找到根节点的位置,分两部分:前半部分是左子树的中序遍历,后半部分是右子树的中序遍历
2. 创建函数,如`buildTree()`,用于根据这两个序列构建二叉树。递归地构造左右子树。
3. 计算高度的辅助函数,如`height()`,使用递归公式:对于非空二叉树,高度等于左子树和右子树高度的最大值加一。
以下是C语言的一个简单示例,由于实际编写完整代码并处理边界情况会比较复杂,这里仅给出核心思路的伪代码:
```c
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 恢复二叉树结构
TreeNode* buildTree(int pre[], int in[], int start, int end) {
if (start > end) return NULL;
// ... (在这部分编写寻找根节点的代码)
TreeNode* root = createNode(pre[start]); // 创建根节点
// ... (在这部分编写递归填充左右子树的代码)
return root;
}
// 计算二叉树高度
int height(TreeNode* node) {
if (node == NULL) return 0;
return 1 + max(height(node->left), height(node->right));
}
int main() {
int pre[] = {1, 2, 4, 5, 3}; // 先序遍历
int in[] = {4, 2, 5, 1, 3}; // 中序遍历
int n = sizeof(pre) / sizeof(pre[0]);
TreeNode* root = buildTree(pre, in, 0, n - 1);
int treeHeight = height(root);
printf("The height of the binary tree is: %d\n", treeHeight);
return 0;
}
```
阅读全文