首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用python实现树的遍历

在Python中实现树的遍历可以通过递归或迭代的方法来完成。树的遍历主要有三种方式:前序遍历(Pre-order Traversal)、中序遍历(In-order Traversal)和后序遍历(Post-order Traversal)。此外,还有层序遍历(Level-order Traversal),通常使用队列来实现。

以下是一个简单的二叉树节点类和各种遍历方法的实现:

定义二叉树节点类

代码语言:javascript
复制
class TreeNode:
    def __init__(self, value=0, left=None, right=None):
        self.value = value
        self.left = left
        self.right = right

前序遍历(Pre-order Traversal)

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

递归实现

代码语言:javascript
复制
def pre_order_traversal(root):
    if root:
        print(root.value, end=' ')
        pre_order_traversal(root.left)
        pre_order_traversal(root.right)

迭代实现

代码语言:javascript
复制
def pre_order_traversal_iterative(root):
    if not root:
        return
    stack = [root]
    while stack:
        node = stack.pop()
        print(node.value, end=' ')
        if node.right:
            stack.append(node.right)
        if node.left:
            stack.append(node.left)

中序遍历(In-order Traversal)

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

递归实现

代码语言:javascript
复制
def in_order_traversal(root):
    if root:
        in_order_traversal(root.left)
        print(root.value, end=' ')
        in_order_traversal(root.right)

迭代实现

代码语言:javascript
复制
def in_order_traversal_iterative(root):
    stack = []
    current = root
    while stack or current:
        while current:
            stack.append(current)
            current = current.left
        current = stack.pop()
        print(current.value, end=' ')
        current = current.right

后序遍历(Post-order Traversal)

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

递归实现

代码语言:javascript
复制
def post_order_traversal(root):
    if root:
        post_order_traversal(root.left)
        post_order_traversal(root.right)
        print(root.value, end=' ')

迭代实现

代码语言:javascript
复制
def post_order_traversal_iterative(root):
    if not root:
        return
    stack1 = [root]
    stack2 = []
    while stack1:
        node = stack1.pop()
        stack2.append(node)
        if node.left:
            stack1.append(node.left)
        if node.right:
            stack1.append(node.right)
    while stack2:
        node = stack2.pop()
        print(node.value, end=' ')

层序遍历(Level-order Traversal)

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

迭代实现

代码语言:javascript
复制
from collections import deque

def level_order_traversal(root):
    if not root:
        return
    queue = deque([root])
    while queue:
        node = queue.popleft()
        print(node.value, end=' ')
        if node.left:
            queue.append(node.left)
        if node.right:
            queue.append(node.right)

示例

以下是一个示例,展示如何创建一个二叉树并进行各种遍历:

代码语言:javascript
复制
if __name__ == "__main__":
    # 创建一个示例二叉树
    #       1
    #      / \
    #     2   3
    #    / \   \
    #   4   5   6
    root = TreeNode(1)
    root.left = TreeNode(2)
    root.right = TreeNode(3)
    root.left.left = TreeNode(4)
    root.left.right = TreeNode(5)
    root.right.right = TreeNode(6)

    print("Pre-order Traversal (Recursive):")
    pre_order_traversal(root)
    print("\nPre-order Traversal (Iterative):")
    pre_order_traversal_iterative(root)

    print("\nIn-order Traversal (Recursive):")
    in_order_traversal(root)
    print("\nIn-order Traversal (Iterative):")
    in_order_traversal_iterative(root)

    print("\nPost-order Traversal (Recursive):")
    post_order_traversal(root)
    print("\nPost-order Traversal (Iterative):")
    post_order_traversal_iterative(root)

    print("\nLevel-order Traversal:")
    level_order_traversal(root)

运行上述代码将输出:

代码语言:javascript
复制
Pre-order Traversal (Recursive):
1 2 4 5 3 6 
Pre-order Traversal (Iterative):
1 2 4 5 3 6 
In-order Traversal (Recursive):
4 2 5 1 3 6 
In-order Traversal (Iterative):
4 2 5 1 3 6 
Post-order Traversal (Recursive):
4 5 2 6 3 1 
Post-order Traversal (Iterative):
4 5 2 6 3 1 
Level-order Traversal:
1 2 3 4 5 6 

这些方法展示了如何在Python中实现树的各种遍历方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

5分3秒

中文编程,实现自动化办公,用Python整个大活

4分18秒

【剑指Offer】33. 二叉搜索树的后序遍历

306
5分22秒

python基础:遍历字典的三种方式

7分31秒

尚硅谷_Python基础_74_字典的遍历.avi

23分9秒

106-尚硅谷-图解Java数据结构和算法-遍历线索化二叉树实现

23分9秒

106-尚硅谷-图解Java数据结构和算法-遍历线索化二叉树实现

4分21秒

用Python的方式打开酷玩的a sky full of stars

5分57秒

【采集软件】用python开发的小红书搜索采集笔记软件!

3分38秒

python实现的群发工具小助手

25分29秒

58-尚硅谷-Scala数据结构和算法-二叉树的前序中序后序遍历

43分8秒

学习猿地 Python基础教程 列表操作3 列表的遍历及推导式

17秒

python实现一颗跳动的心

24.3K
领券