#这个思路利用了:根右左的顺序遍历二叉树,反过来就是 左右根 即后序遍历了
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)
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- hzar.cn 版权所有 赣ICP备2024042791号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务