590. N-ary Tree Postorder Traversal - Easy
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?
M1: recursive
time: O(n), space: O(height)
/* // Definition for a Node. class Node { public int val; public List<Node> children; public Node() {} public Node(int _val,List<Node> _children) { val = _val; children = _children; } }; */ class Solution { public List<Integer> postorder(Node root) { List<Integer> res = new ArrayList<>(); postorder(root, res); return res; } public void postorder(Node root, List<Integer> res) { if(root == null) { return; } for(int i = 0; i < root.children.size(); i++) { postorder(root.children.get(i), res); } res.add(root.val); } }
M2: iterative
time: O(n), space: O(n) -- depending on the tree structure, worst case: the stack can keep up the whole tree nodes
/* // Definition for a Node. class Node { public int val; public List<Node> children; public Node() {} public Node(int _val,List<Node> _children) { val = _val; children = _children; } }; */ class Solution { public List<Integer> postorder(Node root) { List<Integer> res = new ArrayList<>(); if(root == null) { return res; } Stack<Node> s = new Stack<>(); s.add(root); while(!s.isEmpty()) { Node tmp = s.pop(); res.add(0, tmp.val); for(Node n : tmp.children) { if(n != null) { s.push(n); } } } return res; } }
二刷:
class Solution { public List<Integer> postorder(Node root) { List<Integer> res = new ArrayList<>(); if(root == null) { return res; } LinkedList<Node> stack = new LinkedList<>(); stack.offerFirst(root); while(!stack.isEmpty()) { Node cur = stack.pollFirst(); res.add(0, cur.val); for(int i = 0; i < cur.children.size(); i++) { stack.offerFirst(cur.children.get(i)); } } return res; } }