给定一个 N 叉树,返回其节点值的后序遍历。
1.递归
Recursion is easy to implement and understand by definition https://en.wikipedia.org/wiki/Tree_traversal#Post-order_(LRN).
def postorder(self, root):
"""
:type root: Node
:rtype: List[int]
"""
res = []
if root == None: return res
def recursion(root, res):
for child in root.children:
recursion(child, res)
res.append(root.val)
recursion(root, res)
return res
def postorder(self, root):
"""
:type root: Node
:rtype: List[int]
"""
if not root:
return []
self.res=[]
self.recursion(root)
return self.res
def recursion(self,root):
for child in root.children:
self.recursion(child)
self.res.append(root.val)
2.循环:
Iteration is basically pre-order traversal but rather than go left, go right first then reverse its result.
def postorder(self, root):
res = []
if root == None: return res
stack = [root]
while stack:
curr = stack.pop()
res.append(curr.val)
stack.extend(curr.children)
return res[::-1]