class Solution:
def postorderTraversal(self, root: TreeNode) :
res = []
last = root #记录上一个访问节点,初始为根
if not root:
return res
s = [root]
while s:
# 取栈顶作为本轮的根节点,注意最后才访问所以不能出栈
cur = s[-1]
# 1. c的左子非空,且左子和右子都没处理过
if cur.left and cur.left != last and cur.right != last:
s.append(cur.left)
# 2. 若1不成立,且c的右子非空,且右子未处理过
elif cur.right and cur.right != last:
s.append(cur.right)
# 3. 若1和2不成立,说明c的左子树和右子树都已处理,将cur弹栈并输出,last标记为cur
else:
cur = s.pop()
res.append(cur.val)
last = cur
return res