2.编写程序实现在二叉树的中序遍历和后序遍历 递归和非递归算法。
时间: 2024-05-15 11:17:54 浏览: 129
好的,您的问题已记录下来了。现在我来回答您的问题。
在二叉树的中序遍历和后序遍历中,我们都需要遍历左子树、右子树和根节点,但是访问的顺序有所不同。以下是递归和非递归算法的实现。
中序遍历递归算法:
```python
# 中序遍历二叉树
def inorder_traversal(root):
if not root:
return
inorder_traversal(root.left)
print(root.val)
inorder_traversal(root.right)
```
中序遍历非递归算法:
```python
# 中序遍历二叉树(非递归)
def inorder_traversal(root):
stack = []
node = root
while node or stack:
while node:
stack.append(node)
node = node.left
node = stack.pop()
print(node.val)
node = node.right
```
后序遍历递归算法:
```python
# 后序遍历二叉树
def postorder_traversal(root):
if not root:
return
postorder_traversal(root.left)
postorder_traversal(root.right)
print(root.val)
```
后序遍历非递归算法:
```python
# 后序遍历二叉树(非递归)
def postorder_traversal(root):
stack = []
last_visited = None
node = root
while node or stack:
while node:
stack.append(node)
node = node.left
node = stack[-1]
if not node.right or last_visited == node.right:
print(node.val)
stack.pop()
last_visited = node
node = None
else:
node = node.right
```
以上就是基于递归和非递归的二叉树中序遍历和后序遍历算法。希望这能够帮到您!
阅读全文