📜  二叉树的混序遍历(1)

📅  最后修改于: 2023-12-03 15:21:40.291000             🧑  作者: Mango

二叉树的混序遍历

在二叉树中,混序遍历是一种遍历所有节点的方法。混序遍历顾名思义,是将左、中、右节点以任意顺序进行遍历的方式。这篇文章将介绍三种主要的混序遍历方式:前序、中序和后序遍历,并提供相应的代码实现。

前序遍历

前序遍历是一种混序遍历方式,它的遍历顺序为:根节点 -> 左节点 -> 右节点。可以使用递归或栈来实现。

实现前序遍历的递归代码如下:

def preorder_traversal(root):
    if root:
        print(root.val)
        preorder_traversal(root.left)
        preorder_traversal(root.right)

实现前序遍历的栈代码如下:

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

中序遍历是一种混序遍历方式,它的遍历顺序为:左节点 -> 根节点 -> 右节点。可以使用递归或栈来实现。

实现中序遍历的递归代码如下:

def inorder_traversal(root):
    if root:
        inorder_traversal(root.left)
        print(root.val)
        inorder_traversal(root.right)

实现中序遍历的栈代码如下:

def inorder_traversal(root):
    if not root:
        return []
    stack, res = [], []
    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
后序遍历

后序遍历是一种混序遍历方式,它的遍历顺序为:左节点 -> 右节点 -> 根节点。可以使用递归或栈来实现。

实现后序遍历的递归代码如下:

def postorder_traversal(root):
    if root:
        postorder_traversal(root.left)
        postorder_traversal(root.right)
        print(root.val)

实现后序遍历的栈代码如下:

def postorder_traversal(root):
    if not root:
        return []
    stack, res = [root], []
    while stack:
        node = stack.pop()
        if node:
            res.append(node.val)
            stack.append(node.left)
            stack.append(node.right)
    return res[::-1]
总结

以上是三种混序遍历的实现方法。前序、中序和后序遍历的遍历方式都不同,尽管它们都是混序遍历方式,但它们的实现方法却都非常相似。在具体实现时,我们可以选择递归或栈,或者根据问题的要求来选择最适合的方法。