Python中的树遍历算法

2023-04-11 00:00:00 python 算法 遍历

Python中的树遍历算法包括前序遍历、中序遍历和后序遍历。

前序遍历:根节点 → 左子树 → 右子树(可以记作“根-左-右”)

中序遍历:左子树 → 根节点 → 右子树(可以记作“左-根-右”)

后序遍历:左子树 → 右子树 → 根节点(可以记作“左-右-根”)

下面是代码实现:

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

# 前序遍历
def preorderTraversal(root):
    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

# 中序遍历
def inorderTraversal(root):
    if not root:
        return []
    res = []
    stack = []
    while root or stack:
        while root:
            stack.append(root)
            root = root.left
        node = stack.pop()
        res.append(node.val)
        root = node.right
    return res

# 后序遍历
def postorderTraversal(root):
    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]

# 测试样例
root = TreeNode('p')
root.left = TreeNode('i')
root.right = TreeNode('d')
root.left.left = TreeNode('a')
root.left.right = TreeNode('n')
root.right.left = TreeNode('a')
root.right.right = TreeNode('c')
print(preorderTraversal(root)) # ['p', 'i', 'a', 'n', 'd', 'a', 'c']
print(inorderTraversal(root)) # ['a', 'i', 'n', 'p', 'a', 'd', 'c']
print(postorderTraversal(root)) # ['a', 'n', 'i', 'c', 'a', 'd', 'p']

以上是树的遍历算法的详细说明和代码演示。其中,代码中使用了一个树节点类来表示树。对于每个节点,都存储着一个值以及左右子树。在遍历算法中,我们使用了栈来保存节点,实现了不同的遍历方式。注意,由于栈是先进后出的数据结构,所以前序遍历中需要先将右子树入栈,再将左子树入栈;而后序遍历中需要先遍历左子树和右子树,最后再遍历根节点。

相关文章