Given an n-ary tree, return the postorder traversal of its nodes‘ values.
For example, given a 3-ary
tree:
Return its postorder traversal as: [5,6,3,2,4,1]
.
Note: Recursive solution is trivial, could you do it iteratively?
Recursion Solution:
""" # Definition for a Node. class Node(object): def __init__(self, val, children): self.val = val self.children = children """ class Solution(object): def postorder(self, root): """ :type root: Node :rtype: List[int] """ def dfs(r): if not r: return else: for c in r.children: dfs(c) result.append(r.val) result=[] dfs(root) return result
Iteration Solution:
""" # Definition for a Node. class Node(object): def __init__(self, val, children): self.val = val self.children = children """ class Solution(object): def postorder(self, root): """ :type root: Node :rtype: List[int] """ if not root: return [] # We can use a deque to store the solution res=collections.deque() # We use stack to store all the node #Every time, we only need to pick the top node in the stack #and store its value in res #And then we store its children in the stack. The right-most #child is stored in the top. #If our stack is empty, we finish our job. stack=[root] while stack: u=stack.pop() res.appendleft(u.val) for c in u.children: stack.append(c) #change deque back to list return list(res)
原文地址:https://www.cnblogs.com/chiyeung/p/9728816.html
时间: 2024-11-08 00:00:41