二叉树的先序遍历递归算法计算二叉树的高度的完整C++代码
时间: 2024-12-16 17:02:29 浏览: 14
首先,我们需要明确一点,二叉树的高度并不是通过先序遍历来直接计算的,而是需要额外记录每个节点的深度信息,然后逐层递增。但是,我们可以结合先序遍历过程,同时递归地计算当前节点的最大子树高度(左子树和右子树的高度),最后取最大值加一作为该节点的高度。下面是完整的C++代码示例:
```cpp
#include <iostream>
using namespace std;
// 定义二叉树节点结构体
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 计算树的高度,采用辅助函数递归实现
int heightHelper(TreeNode* root, int& maxDepth) {
if (root == nullptr) {
return 0; // 空节点的高度为0
}
// 先访问根节点
cout << root->val << " "; // 这里只是打印,对于实际高度计算可以忽略
// 递归计算左右子树的最大深度,并更新最大深度
int leftHeight = heightHelper(root->left, maxDepth);
int rightHeight = heightHelper(root->right, maxDepth);
// 返回当前节点的最大深度(即根节点的高度)
maxDepth = max(maxDepth, leftHeight + rightHeight + 1);
return max(leftHeight, rightHeight) + 1; // 返回当前节点的高度
}
// 主函数用于获取树的高度
int getHeight(TreeNode* root) {
int maxDepth = 0;
heightHelper(root, maxDepth);
return maxDepth;
}
int main() {
// 创建并初始化一个示例二叉树
// ... (这里省略具体的二叉树构建代码)
// 获取二叉树的高度
int treeHeight = getHeight(root);
cout << "The height of the binary tree is: " << treeHeight << endl;
return 0;
}
```
在这个例子中,`heightHelper` 函数负责递归计算并返回给定节点的最小深度,而 `getHeight` 函数则是外部接口,接收树的根节点并返回整个树的高度。
阅读全文