Recursive:
Java:
private List<List<Integer>> dfs(Node node, List<List<Integer>> res, int level) {
if (node == null) return res;
if (res.size() == level) res.add(new ArrayList<>());
res.get(level).add(node.val);
for (Node child : node.children) dfs(child, res, level + 1);
return res;
}
// https://leetcode.com/problems/n-ary-tree-level-order-traversal/discuss/155927/Beat-100-of-Java-DFS-(recursive)
Iterative:
FIFO -> queue
--------------------------------------------------------
1, (1 out, add children) 3 2 4, (3 out, add children) 5 6
--------------------------------------------------------
Java:
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> ret = new LinkedList<>();
if (root == null) return ret;
Queue<Node> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
List<Integer> curLevel = new LinkedList<>();
int len = queue.size();
for (int i = 0; i < len; i++) {
Node curr = queue.poll();
curLevel.add(curr.val);
for (Node c : curr.children)
queue.offer(c);
}
ret.add(curLevel);
}
return ret;
}
// https://leetcode.com/problems/n-ary-tree-level-order-traversal/discuss/134911/Java-Solution
Python:
def levelOrder(self, root):
q, ret = [root], []
while any(q):
ret.append([node.val for node in q])
q = [child for node in q for child in node.children if child]
return ret
# https://leetcode.com/problems/n-ary-tree-level-order-traversal/discuss/148877/Python-5-lines-BFS-solution
class Solution(object):
def levelOrder(self, root):
"""
:type root: Node
:rtype: List[List[int]]
"""
if not root:return []
res = []
stack = [root]
while stack:
temp = []
next_stack = []
for node in stack:
temp.append(node.val)
for child in node.children:
next_stack.append(child)
stack = next_stack
res.append(temp)
return res
# https://leetcode.com/problems/n-ary-tree-level-order-traversal/discuss/162439/Python-iterative-solution-beat-96