先序遍历的非递归遍历二叉树用 C++实现代码
时间: 2024-12-10 15:51:25 浏览: 10
先序遍历(Preorder Traversal),也称为根-左-右顺序,是指访问二叉树节点的顺序是根节点 -> 左子树 -> 右子树。下面是使用C++非递归的方式实现先序遍历:
```cpp
#include <iostream>
using namespace std;
// 定义二叉树结点
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 非递归先序遍历函数
void preorderTraversal(TreeNode* root) {
if (root == nullptr) return; // 如果根节点为空,直接返回
stack<TreeNode*> s; // 使用栈保存待处理的节点
s.push(root);
while (!s.empty()) {
TreeNode* curr = s.top();
cout << curr->val << " "; // 访问当前节点
s.pop(); // 移除已访问的节点
// 将右子节点压入栈,然后左子节点,保证先访问左
if (curr->right != nullptr) s.push(curr->right);
if (curr->left != nullptr) s.push(curr->left);
}
}
int main() {
// 创建示例二叉树
TreeNode* tree = new TreeNode(1);
tree->left = new TreeNode(2);
tree->right = new TreeNode(3);
tree->left->left = new TreeNode(4);
tree->left->right = new TreeNode(5);
cout << "Preorder traversal of the binary tree is: ";
preorderTraversal(tree);
return 0;
}
```
当你运行这个程序,它将输出二叉树的先序遍历结果。
阅读全文