Python实现二叉树的常见遍历操作总结【7种方法】

  • Post category:Python

下面是详细讲解“Python实现二叉树的常见遍历操作总结【7种方法】”的完整攻略。

1. 什么是二叉树

二叉树是一种树形结构,每个节点最多有两个子节点。二叉树的遍历是指按照一定的顺序访问二叉树中的所有节点。

2. 二叉树的遍历方法

以下是二叉树的七种遍历方法。

2.1 前序遍历

前序遍历是指先访问根节点,然后访问左子树,最后访问右子树。以下是一个前序遍历的示例。

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def preorderTraversal(root: TreeNode) -> List[int]:
    if not root:
        return []
    res = []
    stack = [root]
    while stack:
        node = stack.pop()
        res.append(node.val)
        if node.right:
            stack.append(node.right)
        if node.left:
            stack.append(node.left)
    return res

2.2 中序遍历

中序遍历是指先访问左子树,然后访问根节点,最后访问右子树。以下是一个中序遍历的示例。

def inorderTraversal(root: TreeNode) -> List[int]:
    if not root:
        return []
    res = []
    stack = []
    node = root
    while stack or node:
        while node:
            stack.append(node)
            node = node.left
        node = stack.pop()
        res.append(node.val)
        node = node.right
    return res

2.3 后序遍历

后序遍历是指先访问左子树,然后访问右子树,最后访问根节点。以下是一个后序遍历的示例。

def postorderTraversal(root: TreeNode) -> List[int]:
    if not root:
        return []
    res = []
    stack = [root]
    while stack:
        node = stack.pop()
        res.append(node.val)
        if node.left:
            stack.append(node.left)
        if node.right:
            stack.append(node.right)
    return res[::-1]

2.4 层序遍历

层序遍历是指按照从上到下、从左到右的顺序访问二叉树中的所有节点。以下是一个层序遍历的示例。

def levelOrder(root: TreeNode) -> List[List[int]]:
    if not root:
        return []
    res = []
    queue = [root]
    while queue:
        level = []
        for _ in range(len(queue)):
            node = queue.pop(0)
            level.append(node.val)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        res.append(level)
    return res

2.5 前序遍历(递归)

前序遍历也可以使用递归实现。以下是一个前序遍历(递归)的示例。

def preorderTraversal(root: TreeNode) -> List[int]:
    if not root:
        return []
    res = [root.val]
    res += preorderTraversal(root.left)
    res += preorderTraversal(root.right)
    return res

2.6 中序遍历(递归)

中序遍历也可以使用递归实现。以下是一个中序遍历(递归)的示例。

def inorderTraversal(root: TreeNode) -> List[int]:
    if not root:
        return []
    res = []
    res += inorderTraversal(root.left)
    res.append(root.val)
    res += inorderTraversal(root.right)
    return res

2.7 后序遍历(递归)

后序遍历也可以使用递归实现。以下是一个后序遍历(递归)的示例。

def postorderTraversal(root: TreeNode) -> List[int]:
    if not root:
        return []
    res = []
    res += postorderTraversal(root.left)
    res += postorderTraversal(root.right)
    res.append(root.val)
    return res

3. 示例说明

以下是两个示例说明,分别是前序遍历和层序遍历。

3.1 前序遍历

以下是一个前序遍历的示例,使用前序遍历遍历二叉树。

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def preorderTraversal(root: TreeNode) -> List[int]:
    if not root:
        return []
    res = []
    stack = [root]
    while stack:
        node = stack.pop()
        res.append(node.val)
        if node.right:
            stack.append(node.right)
        if node.left:
            stack.append(node.left)
    return res

# 测试
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
print(preorderTraversal(root))  # [1, 2, 4, 5, 3]

3.2 层序遍历

以下是一个层序遍历的示例,使用层序遍历遍历二叉树。

def levelOrder(root: TreeNode) -> List[List[int]]:
    if not root:
        return []
    res = []
    queue = [root]
    while queue:
        level = []
        for _ in range(len(queue)):
            node = queue.pop(0)
            level.append(node.val)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        res.append(level)
    return res

# 测试
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
print(levelOrder(root))  # [[1], [2, 3], [4, 5]]

4. 总结

二叉树的遍历是指按照一定的顺序访问二叉树中的所有节点。Python中可以使用递归和迭代两种方式实现二叉树的遍历。本文介绍了二叉树的七种遍历方法,并提供了相应的示例。其中,前序遍历、中序遍历、后序遍历和层序遍历是二叉树遍历中最常用的四种方法。