2.编写程序实现在二叉树的中序遍历和后序遍历 递归和非递归算法并运行
时间: 2024-05-07 17:17:09 浏览: 107
好的,关于你提到的问题,可以用以下的 Python 代码实现二叉树的中序遍历和后序遍历的递归和非递归算法。运行前需要先构建一个二叉树,并将根节点传入函数中。
```python
# 二叉树节点定义
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 二叉树中序遍历 递归算法
def inorderRecursive(root):
if not root:
return []
res = []
res += inorderRecursive(root.left)
res.append(root.val)
res += inorderRecursive(root.right)
return res
# 二叉树中序遍历 非递归算法
def inorderIterative(root):
if not root:
return []
res = []
stack = []
while True:
if root:
stack.append(root)
root = root.left
else:
if not stack:
break
node = stack.pop()
res.append(node.val)
root = node.right
return res
# 二叉树后序遍历 递归算法
def postorderRecursive(root):
if not root:
return []
res = []
res += postorderRecursive(root.left)
res += postorderRecursive(root.right)
res.append(root.val)
return res
# 二叉树后序遍历 非递归算法
def postorderIterative(root):
if not root:
return []
res = []
stack = []
while True:
while root:
if root.right:
stack.append(root.right)
stack.append(root)
root = root.left
root = stack.pop()
if root.right and stack and root.right == stack[-1]:
stack.pop()
stack.append(root)
root = root.right
else:
res.append(root.val)
root = None
if not stack:
break
return res
# 构建一个二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(6)
root.right.right = TreeNode(7)
# 中序遍历
print("中序遍历 递归算法:", inorderRecursive(root))
print("中序遍历 非递归算法:", inorderIterative(root))
# 后序遍历
print("后序遍历 递归算法:", postorderRecursive(root))
print("后序遍历 非递归算法:", postorderIterative(root))
```
希望这个代码能够帮助到你,如果还有问题,欢迎提问。
阅读全文