自己设计一个二叉树,深度最少为3,请写出后序遍历的递归算法和非递归算法,输出树中所有结点。
时间: 2023-06-05 09:47:48 浏览: 162
首先,我们设计一个深度为3的二叉树,如下图所示:
```
1
/ \
2 3
/ \ \
4 5 6
```
接下来,我们分别介绍后序遍历的递归算法和非递归算法。
后序遍历的递归算法:
```python
def postorder_recursive(root):
if root:
postorder_recursive(root.left)
postorder_recursive(root.right)
print(root.val)
```
后序遍历的非递归算法:
```python
def postorder_iterative(root):
if not root:
return []
stack = []
result = []
stack.append(root)
while stack:
node = stack.pop()
result.append(node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return result[::-1]
```
输出树中所有结点:
```python
def print_tree(root):
if root:
print(root.val)
print_tree(root.left)
print_tree(root.right)
```
调用以上三个函数,可以输出树中所有结点:
```python
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.right = TreeNode(6)
print("后序遍历的递归算法:")
postorder_recursive(root)
print("后序遍历的非递归算法:")
print(postorder_iterative(root))
print("输出树中所有结点:")
print_tree(root)
```
输出结果:
```
后序遍历的递归算法:
4
5
2
6
3
1
后序遍历的非递归算法:
[4, 5, 2, 6, 3, 1]
输出树中所有结点:
1
2
4
5
3
6
```
阅读全文