如何实现二叉树的非递归前序遍历和后序遍历?
时间: 2024-12-14 09:14:53 浏览: 16
非递归地实现二叉树的前序遍历(根-左-右)和后序遍历(左-右-根)通常需要借助栈的数据结构。以下是步骤:
**前序遍历(Preorder Traversal):**
1. 如果当前节点不为空:
- 访问当前节点(根)
- 将当前节点的右子节点入栈(后访问)
- 将当前节点的左子节点入栈(后访问)
```python
def preorder_traversal(root):
stack = [root] if root else []
while stack:
node = stack.pop()
print(node.value, end=' ') # 访问节点值
if node.right:
stack.append(node.right) # 先右后左
if node.left:
stack.append(node.left)
```
**后序遍历(Postorder Traversal):**
1. 如果当前节点不为空:
- 将当前节点的左子节点和右子节点入栈(先处理子节点)
- 访问当前节点
```python
def postorder_traversal(root):
stack = [root] if root else []
output = [] # 存储结果
while stack:
node = stack.pop()
output.insert(0, node.value) # 插入到最前端
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return ' '.join(map(str, output)) # 返回字符串形式的结果
```
阅读全文