「力扣」第 145 题:二叉树的后序遍历


「力扣」第 145 题:二叉树的后序遍历

传送门:英文网址:145. Binary Tree Postorder Traversal ,中文网址:145. 二叉树的后序遍历

给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树

示例:

输入: 3
输出:
[
[1,null,3,2],
[3,2,null,1],
[3,1,null,null,2],
[2,1,3],
[1,null,2,null,3]
]
解释:
以上的输出对应以下 5 种不同结构的二叉搜索树:

1         3     3      2      1
 \       /     /      / \      \
  3     2     1      1   3      2
 /     /       \                 \
2     1         2                 3

Python 代码:

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


class Solution:
    def postorderTraversal(self, root):
        if not root:
            return []
        stack = [(1, root)]
        res = []
        while stack:
            command, node = stack.pop()
            if command == 0:
                res.append(node.val)
            else:
                # 后序遍历:先左右子树,再自己
                # 入栈顺序:自己、右子树、左子树
                stack.append((0, node))
                if node.right:
                    stack.append((1, node.right))
                if node.left:
                    stack.append((1, node.left))
        return res

上面的过程更好地体现了递归过程中系统栈的作用,按照这种方式,所有的递归的代码都可以改造成非递归的代码。

(本节完)


文章作者: liweiwei1419
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 liweiwei1419 !
评论
 上一篇
「力扣」第 150 题: 逆波兰表达式求值 「力扣」第 150 题: 逆波兰表达式求值
「力扣」第 150 题: 逆波兰表达式求值传送门:150. 逆波兰表达式求值。 根据逆波兰表示法,求表达式的值。 有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 说明: 整数除法只保留整数
2017-09-09
下一篇 
「力扣」第 144 题:二叉树的前序遍历 「力扣」第 144 题:二叉树的前序遍历
「力扣」第 144 题:二叉树的前序遍历传送门:英文网址:144. Binary Tree Preorder Traversal ,中文网址:144. 二叉树的前序遍历 。 给定一个二叉树,返回它的 前序 遍历。 示例: 输入: [1,n
2017-09-07
  目录