LeetCode-Python-145. 二叉树的后序遍历

  • Post author:
  • Post category:python


给定一个二叉树,返回它的

后序

遍历。


示例:

输入: [1,null,2,3]  
   1
    \
     2
    /
   3 

输出: [3,2,1]

第一种思路:

递归,先处理子树再把node.val加进去。

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

class Solution(object):
    def postorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if not root:
            return []
        return self.postorderTraversal(root.left) + self.postorderTraversal(root.right) + [root.val]

第二种思路:

迭代,

按照根节点,左节点,右节点的顺序入栈,

然后逐个添加到res的头部。

class Solution(object):
    def postorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if not root:
            return []
        stack, res = [root], []
        while stack:
            cur = stack.pop()
            
            if cur.left:
                stack.append(cur.left)
            if cur.right:
                stack.append(cur.right)
            res.insert(0, cur.val)
            
        return res

第三种思路:

迭代,

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

测试发现是可行的,以下代码是在

LeetCode-Python-144. 二叉树的前序遍历

的基础上修改的。

class Solution(object):
    def postorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if not root:
            return []
        
        stack = [root]
        res = []
        while stack:
            cur = stack.pop()
            res.append(cur.val) 
            if cur.left:
                stack.append(cur.left)
            if cur.right:
                stack.append(cur.right)
            
        return res[::-1]



版权声明:本文为qq_32424059原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。