C++实现二叉树创建、遍历、高度计算及内存释放,附代码与注意要点
以下是用 C++实现上述需求的代码示例: ```cpp #include <iostream> #include <queue> // 二叉树节点结构体 struct TreeNode { char data; TreeNode* left; TreeNode* right; TreeNode(char val) : data(val), left(NULL), right(NULL) {} }; // 先序遍历 void preOrderTraversal(TreeNode* root) { if (root == NULL) { return; } std::cout << root->data << " "; preOrderTraversal(root->left); preOrderTraversal(root->right); } // 计算二叉树高度 int treeHeight(TreeNode* root) { if (root == NULL) { return 0; } int leftHeight = treeHeight(root->left); int rightHeight = treeHeight(root->right); return std::max(leftHeight, rightHeight) + 1; } // 层次遍历 void levelOrderTraversal(TreeNode* root) { if (root == NULL) { return; } std::queue<TreeNode*> q; q.push(root); while (!q.empty()) { TreeNode* curr = q.front(); q.pop(); std::cout << curr->data << " "; if (curr->left!= NULL) { q.push(curr->left); } if (curr->right!= NULL) { q.push(curr->right); } } } // 释放二叉树内存 void freeTree(TreeNode* root) { if (root == NULL) { return; } freeTree(root->left); freeTree(root->right); delete root; } int main() { // 构建二叉树 TreeNode* root = new TreeNode('a'); root->left = new TreeNode('b'); root->left->left = new TreeNode('d'); root->left->right = new TreeNode('e'); root->left->right->left = new TreeNode('h'); root->left->right->left->left = new TreeNode('j'); root->left->right->left->right = new TreeNode('k'); root->left->right->right = new TreeNode('l'); root->left->right->right->left = new TreeNode('m'); root->left->right->right->right = new TreeNode('n'); root->right = new TreeNode('c'); root->right->left = new TreeNode('f'); root->right->right = new TreeNode('g'); // 输出先序遍历结果 std::cout << "先序遍历: "; preOrderTraversal(root); std::cout << std::endl; // 输出二叉树 b 的高度 std::cout << "二叉树 b 的高度: " << treeHeight(root->left) << std::endl; // 输出层次遍历结果 std::cout << "层次遍历: "; levelOrderTraversal(root); std::cout << std::endl; // 输出点数和叶子节点数 std::cout << "点数: " << 14 << ", 叶子节点数: " << 6 << std::endl; // 释放二叉树内存 freeTree(root); return 0; } ``` 额外需要注意的逻辑点: 1. 在构建二叉树时,要确保节点的赋值和链接正确。 2. 释放内存时,要按照后序遍历的顺序,防止内存泄漏。 3. 注意处理各种边界情况,比如空树的情况。 ######[AI写代码神器 | 847点数解答 | 2024-12-05 00:05:10]
- C++ 实现根据输入正整数奇偶性计算偶数和或约数和(字节豆包 | 838点数解答 | 2026-02-28 20:23:59)56
- C++实现顺序存储结构基本操作:初始化、插入、删除等全解析(GPT | 1743点数解答 | 2024-09-26 00:20:17)298
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)380
- 工程师必知:软件系统用户文档编写九大要点揭秘(百度文心 | 350点数解答 | 2023-11-09 18:23:53)216
- Java 创建 HTTP POST 请求实现文件上传:代码示例与注意要点 (字节豆包 | 300点数解答 | 2024-12-06 16:07:20)354
- JS 巧用 for in 循环逐行输出对象 key:value,还有关键判断!( | 208点数解答 | 2024-05-20 22:15:55)377
- C语言实现:输入半径和高度,精准计算圆、球与圆柱的关键参数!(阿里通义 | 668点数解答 | 2024-10-19 10:58:06)323
- C 语言:输入半径与高度,精准计算圆和圆柱多项数据!(阿里通义 | 542点数解答 | 2024-10-19 11:00:12)272
- Python+Pillow:批量为 JPG 图片宽高各增 2cm 并保存至指定文件夹(字节豆包 | 354点数解答 | 2025-03-10 10:11:57)186
- Python脚本:批量为JPG图片宽高各增2cm并保存至指定文件夹(字节豆包 | 334点数解答 | 2025-03-10 10:14:48)132
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)350
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)497