欢迎访问宙启技术站
智能推送

在Python中实现二叉树遍历的函数

发布时间:2023-08-09 02:13:34

在Python中,可以使用递归和迭代两种方法来实现二叉树的遍历。

1. 递归方法:

递归方法是最简单直观的实现方式,通过递归函数可以实现前序、中序和后序遍历。

# 定义二叉树节点类
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

# 前序遍历
def preorderTraversal(root):
    result = []
    if root:
        result.append(root.val)  # 处理根节点
        result += preorderTraversal(root.left)  # 处理左子树
        result += preorderTraversal(root.right)  # 处理右子树
    return result

# 中序遍历
def inorderTraversal(root):
    result = []
    if root:
        result += inorderTraversal(root.left)  # 处理左子树
        result.append(root.val)  # 处理根节点
        result += inorderTraversal(root.right)  # 处理右子树
    return result

# 后序遍历
def postorderTraversal(root):
    result = []
    if root:
        result += postorderTraversal(root.left)  # 处理左子树
        result += postorderTraversal(root.right)  # 处理右子树
        result.append(root.val)  # 处理根节点
    return result

# 创建测试二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

# 测试遍历函数
print("前序遍历结果:", preorderTraversal(root))
print("中序遍历结果:", inorderTraversal(root))
print("后序遍历结果:", postorderTraversal(root))

程序结果输出为:

前序遍历结果: [1, 2, 4, 5, 3]
中序遍历结果: [4, 2, 5, 1, 3]
后序遍历结果: [4, 5, 2, 3, 1]

2. 迭代方法:

迭代方法使用栈数据结构来辅助遍历,根据不同的遍历顺序,压入栈的方式也不同。

# 前序遍历
def preorderTraversal(root):
    result = []
    stack = []
    while stack or root:
        if root:
            result.append(root.val)  # 处理根节点
            stack.append(root)  # 压入栈
            root = root.left  # 处理左子树
        else:
            node = stack.pop()  # 弹出栈
            root = node.right  # 处理右子树
    return result

# 中序遍历
def inorderTraversal(root):
    result = []
    stack = []
    while stack or root:
        if root:
            stack.append(root)  # 压入栈
            root = root.left  # 处理左子树
        else:
            node = stack.pop()  # 弹出栈
            result.append(node.val)  # 处理根节点
            root = node.right  # 处理右子树
    return result

# 后序遍历
def postorderTraversal(root):
    result = []
    stack = []
    prev = None  # 记录上一次访问的节点
    while stack or root:
        if root:
            stack.append(root)  # 压入栈
            root = root.left  # 处理左子树
        else:
            node = stack[-1]  # 获取栈顶元素
            if node.right and node.right != prev:  # 处理右子树
                root = node.right
            else:
                stack.pop()  # 弹出栈
                result.append(node.val)  # 处理根节点
                prev = node  # 更新上一次访问的节点
    return result

# 创建测试二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

# 测试遍历函数
print("前序遍历结果:", preorderTraversal(root))
print("中序遍历结果:", inorderTraversal(root))
print("后序遍历结果:", postorderTraversal(root))

程序结果输出与前面方法相同。

通过以上两种方法,可以在Python中实现二叉树的前序、中序和后序遍历。