#递归写法
class Solution:
def postorder(self, root: 'Node') -> List[int]:
if root == None:
return []
self.ans = []
self.back_serch(root)
self.ans.append(root.val)
return self.ans
def back_serch(self,root):
if root.children:
for node in root.children:
#先遍历到底层节点
self.back_serch(node)
#再依次输出结果
self.ans.append(node.val)
# self.ans.append(root.val):这个位置不需要出现这句,因为除了root之外的父节点在后面会被遍历到
#迭代写法
class Solution:
def postorder(self, root):
ans = []
stk = [(0,root)]
if root == None:
return []
while stk:
cnt,node = stk.pop()
#当把node节点的所有子节点遍历处理完,就可以把node节点本身加入ans
#当遇到没有子节点的节点时,cnt=0=len(node.children)
if cnt == len(node.children):
ans.append(node.val)
if cnt < len(node.children):
stk.append((cnt+1,node))
#刚加入stk时,cnt都为0
stk.append((0,node.children[cnt]))
return ans