C++实现根据输入构建二叉树并进行先序、中序和后序遍历
以下是实现该功能的C++代码: ```cpp #include <iostream> #include <vector> using namespace std; // 定义二叉树节点结构体 struct TreeNode { char val; TreeNode* left; TreeNode* right; // 构造函数 TreeNode(char x) : val(x), left(nullptr), right(nullptr) {} }; // 构建二叉树 TreeNode* buildTree(int n) { vector<TreeNode*> nodes(n + 1); // 初始化所有节点 for (int i = 1; i <= n; ++i) { nodes[i] = new TreeNode('A' + i - 1); } // 构建树的结构 for (int i = 1; i <= n; ++i) { char l, r; cin >> l >> r; if (l != '0') { nodes[i]->left = nodes[l - 'A' + 1]; } if (r != '0') { nodes[i]->right = nodes[r - 'A' + 1]; } } return nodes[1]; } // 先序遍历 void preOrder(TreeNode* root) { if (root == nullptr) return; cout << root->val; if (root->left or root->right) { cout << " "; } preOrder(root->left); preOrder(root->right); } // 中序遍历 void inOrder(TreeNode* root) { if (root == nullptr) return; inOrder(root->left); cout << root->val; if (root->left or root->right) { cout << " "; } inOrder(root->right); } // 后序遍历 void postOrder(TreeNode* root) { if (root == nullptr) return; postOrder(root->left); postOrder(root->right); cout << root->val; if (root->left or root->right) { cout << " "; } } // 释放二叉树内存 void freeTree(TreeNode* root) { if (root == nullptr) return; freeTree(root->left); freeTree(root->right); delete root; } int main() { int n; cin >> n; TreeNode* root = buildTree(n); // 先序遍历 preOrder(root); cout << endl; // 中序遍历 inOrder(root); cout << endl; // 后序遍历 postOrder(root); cout << endl; // 释放二叉树内存 freeTree(root); return 0; } ``` ### 代码解释 1. **TreeNode结构体**:定义二叉树节点,包含节点的值、左子节点指针和右子节点指针。 2. **buildTree函数**:根据输入构建二叉树。首先创建所有节点,然后根据输入的左右子节点信息连接这些节点。 3. **preOrder函数**:实现先序遍历,先访问根节点,再递归访问左子树和右子树。 4. **inOrder函数**:实现中序遍历,先递归访问左子树,再访问根节点,最后递归访问右子树。 5. **postOrder函数**:实现后序遍历,先递归访问左子树和右子树,最后访问根节点。 6. **freeTree函数**:释放二叉树占用的内存,避免内存泄漏。 7. **main函数**:读取输入,调用`buildTree`构建二叉树,分别调用三种遍历函数输出结果,最后调用`freeTree`释放内存。 ######[AI问答 | 892点数解答 | 2026-02-15 20:58:40]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)322
- 工程师必看!LoadRunner 性能测试标准流程全揭秘 (百度文心 | 215点数解答 | 2023-11-09 18:25:31)370
- JS 巧用 for in 循环逐行输出对象 key:value,还有关键判断!( | 208点数解答 | 2024-05-20 22:15:55)354
- C++实现顺序存储结构基本操作:初始化、插入、删除等全解析(GPT | 1743点数解答 | 2024-09-26 00:20:17)264
- Python知识大挑战:10 道题揭秘编程关键要点与答案(字节豆包 | 296点数解答 | 2024-10-20 19:31:00)225
- Python 求解序列区间总和:索引转换、边界处理与优化策略(字节豆包 | 320点数解答 | 2025-11-05 19:59:35)68
- C++ 实现序列区间查询:计算以 l 开头子区间总和及注意要点(字节豆包 | 543点数解答 | 2025-11-05 19:59:56)40
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)290
- C++ 编程:计算黑衣人布袋中黄宝石总重量(字节豆包 | 132点数解答 | 2025-10-18 19:02:51)111
- 揭秘成都治水管水改革:五大机制闭环管理,技术报告助力供排水智能化优化(GPT | 372点数解答 | 2023-12-04 09:49:06)282
- 2020 年成都治水管水改革多管齐下:建“五大机制”、管网体检,编制报告提效供水排水 (讯飞星火 | 251点数解答 | 2023-12-04 09:49:34)272
- 用 Pandas 深度剖析数据:从读取到统计分析全流程实战(GPT | 642点数解答 | 2024-06-30 15:39:49)339