用C++输出二叉树的前序遍历,包括递归算法和非递归算法,写出完整代码
时间: 2024-11-04 09:14:06 浏览: 20
数据结构二叉树实验(C++).docx
5星 · 资源好评率100%
在C++中,我们可以使用递归和非递归两种方法来实现二叉树的前序遍历。这里我会分别给出这两种方法的代码示例。
**递归算法(Preorder Traversal using Recursion):**
```cpp
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void preorderTraversal(TreeNode* root) {
if (root != NULL) {
// 先访问根节点
cout << root->val << " ";
// 然后遍历左子树
preorderTraversal(root->left);
// 最后遍历右子树
preorderTraversal(root->right);
}
}
```
**非递归算法(Preorder Traversal using Stack):**
```cpp
#include <stack>
void preorderTraversal(TreeNode* root) {
std::stack<TreeNode*> stack;
stack.push(root);
while (!stack.empty()) {
TreeNode* current = stack.top();
stack.pop();
// 如果当前节点非空,先访问它
if (current != NULL) {
cout << current->val << " ";
// 将左右子节点压入栈中,保证先访问左节点再右节点
if (current->right) stack.push(current->right);
if (current->left) stack.push(current->left);
}
}
}
```
在这两个函数中,`TreeNode`代表二叉树节点,`val`存储节点值,`left`和`right`指向左右子节点。
阅读全文