如何使用C++编程实现二叉树的构建,非递归版本的遍历算法,以生成二叉链表并输出前序、中序和后序遍历序列?
时间: 2024-12-02 12:14:59 浏览: 18
链表先序建立二叉树,得到中序后序输出,递归和非递归实现(C++代码加设计报告)
5星 · 资源好评率100%
在C++中,二叉树的非递归遍历可以通过使用队列数据结构来实现。这里我们假设已经有一个`TreeNode`结构,包含值`val`,以及指向左子节点`left`和右子节点`right`的指针。以下是完整的步骤:
1. **构建二叉树** - 例如,对于给定的整数数组,可以手动构造一个二叉树:
```cpp
void buildTree(vector<int>& nums, TreeNode*& root, int start = 0) {
if (start >= nums.size()) return;
root = new TreeNode(nums[start]);
int mid = start + 1;
while (mid < nums.size() && nums[mid] < nums[start]) mid++;
buildTree(nums, root->left, start + 1);
buildTree(nums, root->right, mid);
}
```
这里`nums`是一个整数数组,作为输入构建二叉查找树。
2. **非递归遍历** - 我们分别实现前序、中序和后序遍历:
- **前序遍历(根-左-右)**:
```cpp
void preOrderTraversal(TreeNode* root, vector<int>& res) {
if (!root) return;
res.push_back(root->val);
preOrderTraversal(root->left, res);
preOrderTraversal(root->right, res);
}
```
- **中序遍历(左-根-右)**:
```cpp
void inOrderTraversal(TreeNode* root, vector<int>& res) {
if (!root) return;
inOrderTraversal(root->left, res);
res.push_back(root->val);
inOrderTraversal(root->right, res);
}
```
- **后序遍历(左-右-根)**:
```cpp
void postOrderTraversal(TreeNode* root, vector<int>& res) {
if (!root) return;
postOrderTraversal(root->left, res);
postOrderTraversal(root->right, res);
res.push_back(root->val);
}
```
最后,你可以创建一个`vector<int>`来接收遍历结果,并调用对应的方法进行遍历。
阅读全文