C++实现二叉树创建、遍历、高度计算及释放的完整代码
好的,下面是一个C++程序,用于实现你所描述的功能。程序包括创建二叉树、先序遍历、计算高度、层次遍历、统计结点数和叶子节点数,以及释放二叉树。 ```cpp #include <iostream> #include <queue> using namespace std; // 定义二叉树节点结构 struct TreeNode { char val; TreeNode* left; TreeNode* right; TreeNode(char x) : val(x), left(nullptr), right(nullptr) {} }; // 创建二叉树 TreeNode* createTree() { // 手动创建二叉树 a(b(d,e(h(j,k(i,m(n)))),c(f,g(,i)))) TreeNode* a = new TreeNode('a'); TreeNode* b = new TreeNode('b'); TreeNode* c = new TreeNode('c'); TreeNode* d = new TreeNode('d'); TreeNode* e = new TreeNode('e'); TreeNode* f = new TreeNode('f'); TreeNode* g = new TreeNode('g'); TreeNode* h = new TreeNode('h'); TreeNode* i = new TreeNode('i'); TreeNode* j = new TreeNode('j'); TreeNode* k = new TreeNode('k'); TreeNode* m = new TreeNode('m'); TreeNode* n = new TreeNode('n'); a->left = b; a->right = c; b->left = d; b->right = e; e->left = h; h->left = j; h->right = k; k->left = i; k->right = m; m->right = n; c->left = f; c->right = g; g->right = i; return a; } // 先序遍历 void preOrder(TreeNode* root) { if (root == nullptr) return; cout << root->val << " "; preOrder(root->left); preOrder(root->right); } // 计算二叉树的高度 int getHeight(TreeNode* root) { if (root == nullptr) return 0; int leftHeight = getHeight(root->left); int rightHeight = getHeight(root->right); return max(leftHeight, rightHeight) + 1; } // 层次遍历 void levelOrder(TreeNode* root) { if (root == nullptr) return; queue<TreeNode*> q; q.push(root); while (!q.empty()) { TreeNode* node = q.front(); q.pop(); cout << node->val << " "; if (node->left) q.push(node->left); if (node->right) q.push(node->right); } } // 统计结点数和叶子节点数 void countNodesAndLeaves(TreeNode* root, int& totalNodes, int& leafNodes) { if (root == nullptr) return; totalNodes++; if (root->left == nullptr && root->right == nullptr) { leafNodes++; } countNodesAndLeaves(root->left, totalNodes, leafNodes); countNodesAndLeaves(root->right, totalNodes, leafNodes); } // 释放二叉树 void releaseTree(TreeNode* root) { if (root == nullptr) return; releaseTree(root->left); releaseTree(root->right); delete root; } int main() { TreeNode* root = createTree(); cout << "先序遍历: "; preOrder(root); cout << endl; cout << "二叉树的高度: " << getHeight(root) << endl; cout << "层次遍历: "; levelOrder(root); cout << endl; int totalNodes = 0, leafNodes = 0; countNodesAndLeaves(root, totalNodes, leafNodes); cout << "总节点数: " << totalNodes << ", 叶子节点数: " << leafNodes << endl; releaseTree(root); return 0; } ``` 需要注意的逻辑点: 1. 节点创建:手动创建每个节点并连接它们,确保结构正确。 2. 先序遍历:递归遍历节点,先访问根节点,再访问左子树,最后访问右子树。 3. 释放二叉树:递归删除所有节点,避免内存泄漏。 ######[AI写代码神器 | 933点数解答 | 2024-12-05 00:09:45]
- 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
- Java 创建 HTTP POST 请求实现文件上传:代码示例与注意要点 (字节豆包 | 300点数解答 | 2024-12-06 16:07:20)354
- JS 巧用 for in 循环逐行输出对象 key:value,还有关键判断!( | 208点数解答 | 2024-05-20 22:15:55)376
- C++ 实现我的世界基岩版:从简单框架到开发要点揭秘(字节豆包 | 182点数解答 | 2025-02-22 15:53:11)214
- C++ 实现完整斗地主:含洗牌、发牌与手牌展示,可按需扩展!(字节豆包 | 1028点数解答 | 2026-01-10 08:02:37)56
- 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