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