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

Python函数实现树结构的遍历

发布时间:2023-09-08 20:40:48

Python中可以使用递归或迭代的方式来遍历树结构。下面将介绍这两种方法。

1. 递归遍历树结构:

递归方法是一种常用的遍历树结构的方式,它通过不断地调用函数自身来实现。在递归过程中,需要考虑树的遍历顺序和递归的终止条件。

例如,考虑以下的二叉树结构:

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

# 构造二叉树
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)

接下来,可以使用递归方法来实现不同的树结构遍历方式。

1.1 先序遍历(Preorder Traversal):

先序遍历的顺序为:根节点,左子树,右子树。具体的实现如下:

def preorder_traversal(root):
    if root:
        print(root.value, end=' ')
        preorder_traversal(root.left)
        preorder_traversal(root.right)

# 测试先序遍历
preorder_traversal(root)  # 输出结果:1 2 4 5 3 6 7

1.2 中序遍历(Inorder Traversal):

中序遍历的顺序为:左子树,根节点,右子树。具体的实现如下:

def inorder_traversal(root):
    if root:
        inorder_traversal(root.left)
        print(root.value, end=' ')
        inorder_traversal(root.right)

# 测试中序遍历
inorder_traversal(root)  # 输出结果:4 2 5 1 6 3 7

1.3 后序遍历(Postorder Traversal):

后序遍历的顺序为:左子树,右子树,根节点。具体的实现如下:

def postorder_traversal(root):
    if root:
        postorder_traversal(root.left)
        postorder_traversal(root.right)
        print(root.value, end=' ')

# 测试后序遍历
postorder_traversal(root)  # 输出结果:4 5 2 6 7 3 1

2. 迭代遍历树结构:

迭代方法是一种使用循环来遍历树结构的方式,它通常使用栈来保存待访问的节点。

例如,考虑以下的二叉树结构:

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

# 构造二叉树
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)

在Python中,可以使用迭代方式实现不同的树结构遍历方式。

2.1 先序遍历(Preorder Traversal):

先序遍历的顺序为:根节点,左子树,右子树。具体的实现如下:

def preorder_traversal(root):
    if not root:
        return []
    stack, res = [root], []
    while stack:
        node = stack.pop()
        res.append(node.value)
        if node.right:
            stack.append(node.right)
        if node.left:
            stack.append(node.left)
    return res

# 测试先序遍历
print(preorder_traversal(root))  # 输出结果:[1, 2, 4, 5, 3, 6, 7]

2.2 中序遍历(Inorder Traversal):

中序遍历的顺序为:左子树,根节点,右子树。具体的实现如下:

def inorder_traversal(root):
    stack, res = [], []
    curr = root
    while curr or stack:
        while curr:
            stack.append(curr)
            curr = curr.left
        node = stack.pop()
        res.append(node.value)
        curr = node.right
    return res

# 测试中序遍历
print(inorder_traversal(root))  # 输出结果:[4, 2, 5, 1, 6, 3, 7]

2.3 后序遍历(Postorder Traversal):

后序遍历的顺序为:左子树,右子树,根节点。具体的实现如下:

def postorder_traversal(root):
    stack, res = [root], []
    while stack:
        node = stack.pop()
        if node:
            stack.append(node)
            stack.append(None)
            if node.right:
                stack.append(node.right)
            if node.left:
                stack.append(node.left)
        else:
            res.append(stack.pop().value)
    return res

# 测试后序遍历
print(postorder_traversal(root))  # 输出结果:[4, 5, 2, 6, 7, 3, 1]

以上即为使用递归和迭代两种方式实现树结构的遍历的方法。在实际编程中,可以根据具体的需求选择适合的遍历方式。