📜  数据结构|树遍历|问题8(1)

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

数据结构 | 树遍历 | 问题8

在树的遍历过程中,有一种遍历方式被称为“后序遍历(postorder traversal)”。后序遍历的顺序是先访问左子树,再访问右子树,最后访问根节点。在树结构中,每个节点都被遍历一次且仅一次。现在给你一棵二叉树,请你输出它的后序遍历结果。

解题思路

对于一棵二叉树,我们可以使用递归或迭代的方式进行后序遍历。

递归方式:

  1. 如果当前节点为空,则返回。
  2. 对当前节点的左子树进行后序遍历。
  3. 对当前节点的右子树进行后序遍历。
  4. 访问当前节点。

代码实现如下:

def postorderTraversal(root):
    if root is None:
        return []
    result = []
    result.extend(postorderTraversal(root.left))
    result.extend(postorderTraversal(root.right))
    result.append(root.val)
    return result

迭代方式:

  1. 初始化一个栈,并将根节点入栈。
  2. 取出栈顶节点并弹出,将节点值添加到结果列表中。
  3. 将左右子节点依次入栈。
  4. 当栈为空时,遍历结束。

代码实现如下:

def postorderTraversal(root):
    if root is None:
        return []
    stack = [root]
    result = []
    while stack:
        node = stack.pop()
        result.append(node.val)
        if node.left:
            stack.append(node.left)
        if node.right:
            stack.append(node.right)
    return result[::-1]
总结

后序遍历是树遍历中的一种方式,在遍历过程中,每个节点都只被访问一次。使用递归或迭代方式都可以实现后序遍历。在实际应用中,后序遍历通常用于求解树的高度、深度、节点数等问题。