用c语言给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度
时间: 2024-10-29 07:16:38 浏览: 50
在C语言中,如果你得到了一颗二叉树的先序遍历序列(根节点->左子树->右子树)和中序遍历序列(左子树->根节点->右子树),可以利用这两个序列重建二叉树并计算其高度。首先,我们需要两个辅助函数来帮助我们恢复二叉树结构:
1. 根据先序和中序遍历构建树:我们可以使用递归方法,根据先序遍历的第一个元素作为根节点,然后在中序遍历中找到这个根节点的位置将左右子树分开。
2. 计算树的高度:对于每个非空节点,它的左子树和右子树的高度分别是它左边子节点的最大高度加一和右边子节点的最大高度加一。取两者之中的较大值即为当前节点的高度。
以下是伪代码描述如何做这件事:
```c
// 先序遍历序列,中序遍历序列
int* preorder, *inorder, preorder_size, inorder_size;
int buildTree(int pre[], int in[], int &p, int &i) {
if (p == preorder_size || i == inorder_size) return NULL;
// 在中序遍历中找到根节点位置
int root_val = pre[p];
for (int j = 0; j < inorder_size; j++)
if (in[j] == root_val)
break;
// 构建左子树
Node* left = buildTree(pre + 1, in, p + 1, i);
// 构建右子树
Node* right = buildTree(pre + 1 + j - i, in + i + 1, p + j - i, inorder_size - 1 - i);
// 返回新的节点
return new Node(root_val, left, right);
}
// 计算树的高度
int height(Node* node) {
if (node == NULL) return 0;
return 1 + max(height(node->left), height(node->right));
}
```
这里假设Node是一个包含整数值和指针(指向左子节点和右子节点)的数据结构。`buildTree` 函数用于从两个序列中创建二叉树,而`height`函数用于计算给定二叉树的高度。
阅读全文