在 Python 中实现二叉树的遍历,可以采用以下几种常见的方法:

  1. 前序遍历(Preorder Traversal)
  2. 中序遍历(Inorder Traversal)
  3. 后序遍历(Postorder Traversal)
  4. 层次遍历(Level Order Traversal)

下面将详细介绍如何实现这些遍历方法。

一、定义二叉树节点类

首先,我们需要定义一个二叉树节点类 TreeNode:

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

二、前序遍历(Preorder Traversal)

前序遍历的顺序是:根节点 -> 左子树 -> 右子树。

1. 递归实现

def preorder_traversal_recursive(root):
    if root is None:
        return []
    return [root.value] + preorder_traversal_recursive(root.left) + preorder_traversal_recursive(root.right)

2. 迭代实现

def preorder_traversal_iterative(root):
    if root is None:
        return []
    stack, output = [root], []
    while stack:
        node = stack.pop()
        if node:
            output.append(node.value)
            if node.right:
                stack.append(node.right)
            if node.left:
                stack.append(node.left)
    return output

三、中序遍历(Inorder Traversal)

中序遍历的顺序是:左子树 -> 根节点 -> 右子树。

1. 递归实现

def inorder_traversal_recursive(root):
    if root is None:
        return []
    return inorder_traversal_recursive(root.left) + [root.value] + inorder_traversal_recursive(root.right)

2. 迭代实现

def inorder_traversal_iterative(root):
    stack, output = [], []
    current = root
    while stack or current:
        while current:
            stack.append(current)
            current = current.left
        current = stack.pop()
        output.append(current.value)
        current = current.right
    return output

四、后序遍历(Postorder Traversal)

后序遍历的顺序是:左子树 -> 右子树 -> 根节点。

1. 递归实现

def postorder_traversal_recursive(root):
    if root is None:
        return []
    return postorder_traversal_recursive(root.left) + postorder_traversal_recursive(root.right) + [root.value]

2. 迭代实现

def postorder_traversal_iterative(root):
    if root is None:
        return []
    stack, output = [root], []
    while stack:
        node = stack.pop()
        if node:
            output.append(node.value)
            if node.left:
                stack.append(node.left)
            if node.right:
                stack.append(node.right)
    return output[::-1]  # Reverse the process to get the correct order

五、层次遍历(Level Order Traversal)

层次遍历的顺序是:按层次从上到下,从左到右遍历。

迭代实现

from collections import deque

def level_order_traversal(root):
    if root is None:
        return []
    queue, output = deque([root]), []
    while queue:
        node = queue.popleft()
        output.append(node.value)
        if node.left:
            queue.append(node.left)
        if node.right:
            queue.append(node.right)
    return output

六、示例

最后,提供一个示例二叉树,并展示所有遍历方法的使用:

# 构建示例二叉树
#        1
#       / \
#      2   3
#     / \ / \
#    4  5 6  7

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("Preorder Traversal (Recursive):", preorder_traversal_recursive(root))
print("Preorder Traversal (Iterative):", preorder_traversal_iterative(root))

# 中序遍历
print("Inorder Traversal (Recursive):", inorder_traversal_recursive(root))
print("Inorder Traversal (Iterative):", inorder_traversal_iterative(root))

# 后序遍历
print("Postorder Traversal (Recursive):", postorder_traversal_recursive(root))
print("Postorder Traversal (Iterative):", postorder_traversal_iterative(root))

# 层次遍历
print("Level Order Traversal:", level_order_traversal(root))

运行上述代码,可以得到各类遍历的结果。通过这些遍历方法,你可以更好地理解和操作二叉树结构。

更多推荐