请利用c++语言编写二叉树的前序非递归遍历
时间: 2024-01-23 18:44:41 浏览: 90
C语言实现二叉树的前序遍历(非递归)
以下是利用C++语言编写二叉树的前序非递归遍历的代码:
```c++
#include <iostream>
#include <stack>
using namespace std;
//定义二叉树节点
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
//前序遍历二叉树(非递归)
void preOrderTraversal(TreeNode* root) {
stack<TreeNode*> s;
TreeNode* curr = root;
while (curr || !s.empty()) {
while (curr) {
cout << curr->val << " ";
s.push(curr);
curr = curr->left;
}
curr = s.top();
s.pop();
curr = curr->right;
}
}
int main() {
//构建二叉树
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
//前序遍历二叉树
cout << "前序遍历二叉树(非递归):" << endl;
preOrderTraversal(root);
return 0;
}
```
代码说明:
首先定义二叉树节点结构体 `TreeNode`,包含节点值 `val`,以及左右子节点指针 `left` 和 `right`。
接着定义一个前序遍历二叉树的函数 `preOrderTraversal`,使用栈来实现非递归遍历。首先将根节点入栈,然后对于每个节点,先输出其值,再将其右子节点入栈,最后将其左子节点入栈,这样在下次循环时就能先遍历左子树,再遍历右子树。
最后在 `main` 函数中构建一棵二叉树,并调用 `preOrderTraversal` 函数进行前序遍历输出。
阅读全文