【LeetCode】145. Binary Tree Postorder Traversal

我的个人微信公众号:Microstrong

微信公众号ID:MicrostrongAI

微信公众号介绍:Microstrong(小强)同学主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容,分享在学习过程中的读书笔记!期待您的关注,欢迎一起学习交流进步!

知乎主页:https://www.zhihu.com/people/MicrostrongAI/activities

Github:https://github.com/Microstrong0305

个人博客:https://blog.csdn.net/program_developer

145. Binary Tree Postorder Traversal

Given a binary tree, return the postorder traversal of its nodes' values.

Example:

Input: [1,null,2,3]

   1
    \
     2
    /
   3

Output: [3,2,1]

Follow up: Recursive solution is trivial, could you do it iteratively?

解题思路:

(1)递归解法

from typing import List


# 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: TreeNode) -> List[int]:

        if root is None:
            return []

        res = []

        def postorder(root, res):

            if root is None:
                return res

            postorder(root.left, res)

            postorder(root.right, res)

            res.append(root.val)

        postorder(root, res)

        return res


if __name__ == "__main__":
    root = TreeNode(1)
level1_right = TreeNode(2)
level2_left = TreeNode(3)

root.right = level1_right
level1_right.left = level2_left

sol = Solution()
print(sol.postorderTraversal(root))

(2)迭代解法1

按照根节点,左节点,右节点的顺序入栈,然后逐个添加到res的头部。

class Solution:
    def postorderTraversal(self, root: TreeNode) -> List[int]:
        if root is None:
            return []

        res = list()
        stack = [root]

        while stack:
            node = stack.pop()

            if node.left:
                stack.append(node.left)

            if node.right:
                stack.append(node.right)

            res.insert(0, node.val)

        return res

(3)迭代解法2

既然后序遍历的顺序是左右中,那么自然地想,可不可以先算出中右左的遍历,然后逆转结果得到后序遍历的结果呢。

测试发现是可行的,以下代码是在【LeetCode】144. Binary Tree Preorder Traversal 的基础上修改的。

class Solution:
    def postorderTraversal(self, root: TreeNode) -> List[int]:
        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]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值