from os import NGROUPS_MAX
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param root TreeNode类
# @return int整型一维数组
#
class Solution:
def postorderTraversal_1(self , root: TreeNode) -> List[int]:
# write code here
# 递归: 左子树不为空 递归左子树 右子树不为空 递归右子树
res=[]
if root is None:
return res
def dfs(root):
if root.left: # 左子树不为空
dfs(root.left)
if root.right: # 右子树不为空
dfs(root.right)
res.append(root.val)
dfs(root)
return res
def postorderTraversal(self , root: TreeNode) -> List[int]:
stack=[]
res=[]
if root is None:
return res
prev=None
while len(stack)>0 or root is not None:
while root:
stack.append(root)
root=root.left
root =stack.pop()
if root.right is None or root.right==prev: # 再次回到根节点
# 记录结果
res.append(root.val)
prev=root
root= None
else:
stack.append(root)
root=root.right
return res