AgainUnderstand_145. Binary Tree Postorder Traversal_路漫漫远修兮

思路一:

#这个思路利用了:根右左的顺序遍历二叉树,反过来就是 左右根 即后序遍历了   
class Solution(object):
    def postorderTraversal(self, root):
        stack, res = [], []
        while stack or root:
            if root:
                stack.append(root)
                res.append(root.val)  
                print(res)
                root = root.right     #先加右边,在左边。
            else:
                node = stack.pop()
                root = node.left
        return res[::-1]     #返回Reversed的list    左右根   根右左

 

图解代码运行过程:

 

思路二:

#原理相同,都是反向列表,但是操作不同的,这里的理解上的差别是什么了。
class Solution(object):
    def postorderTraversal(self, root):#这里就是单纯利用栈的存储顺序,没有用左右结点的关系
        ans, stack = [], [root]
        while stack:
            tmp = stack.pop()
            if tmp:
                ans.append(tmp.val)
                stack.append(tmp.left)
                stack.append(tmp.right)#根右左
                print(stack)
        return ans[::-1]

Your input
[1,null,2,3]

stdout#虽然具体元素不清楚,但还是可以通过这里的数据变化来理解遍历过程
[None, <precompiled.treenode.TreeNode object at 0x7f458af42f60>]
[None, <precompiled.treenode.TreeNode object at 0x7f458af42f98>, None]
[None, None, None]#跳出循环

Output
[3,2,1]
Diff
Expected
[3,2,1]

 

图解代码运行过程:

 

思路三:

#这里之所以不要反转,是因为加入元素时的位置改变了,不是在后面加,而是在前面加
        
from collections import deque
class Solution:
    def postorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if not root:#为空
            return []
        
        stack, postorder = [root], deque()
        
        while stack:#没有利用反序,直接来 
            current = stack.pop()
            postorder.appendleft(current.val)
                stack.append(current.left)
            if current.right:
                stack.append(current.right)
            print(postorder)
        return list(postorder)

图解代码运行过程:

 

 

座右铭:站在别人的思想上,看见自己的不足,传播错误的经验,愿君不重蹈覆辙。

 

由于受限于本人经验,难免不足,如有建议,欢迎留言交流。

 

说明:

1.上面的图解步骤是本人在脑海中演算的,与当时的思考情况,仅仅作为理解的参考。

2.箭头代表了运行方向,数字代表了运行顺序。

3.之所以做这个,是因为本人对于二叉树的理解只能停留在“表面理解上”,对于里面究竟是怎么遍历的不清楚,所以就以题目给的例子,做了图解运行过程。

4.如果对您有帮助,请点赞,您的鼓励是本人前进的最好动力。

5.这里由于是对以前本人不理解代码的重新理解,所以省略了很多内容说明,详情请见本人博客链接。https://blog.csdn.net/qq_41827968/article/details/89458702

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值