classSolution:defpostorderTraversal(self,root: TreeNode) : res = [] last = root #记录上一个访问节点,初始为根ifnot 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标记为curelse: cur = s.pop() res.append(cur.val) last = curreturn res