429. N-ary Tree Level Order Traversal

Given an n-ary tree, return the level order traversal of its nodes' values.

Nary-Tree input serialization is represented in their level order traversal, each group of children is separated by the null value (See examples).

Example 1:

Input: root = [1,null,3,2,4,null,5,6]
Output: [[1],[3,2,4],[5,6]]

Example 2:

Input: root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
Output: [[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]

Constraints:

  • The height of the n-ary tree is less than or equal to 1000
  • The total number of nodes is between [0, 10^4]
class Solution {
    public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> res = new ArrayList();
        dfs(res, 0, root);
        return res;
    }
    public void dfs(List<List<Integer>> res, int h, Node root){
        if(root == null) return;
        if(h == res.size()) res.add(new ArrayList());
        res.get(h).add(root.val);
        for(Node node: root.children) dfs(res, h+1, node);
    }
}

总结:

DFS can do, from level 0 we enter the dfs process, if current level == res.size(), means we come to a new level, we need to create a new arrayList to store nodes in this level. Then res.get(h).add(current node).

Then for each node we recursively call dfs method till the end.

class Solution {
    public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> res = new ArrayList();
        if(root == null) return res;
        Queue<Node> q = new LinkedList();
        q.offer(root);
        while(!q.isEmpty()){
            List<Integer> list = new ArrayList();
            int si = q.size();            
            for(int i = 0; i < si; i++){
                Node cur = q.poll();
                list.add(cur.val);
                for(Node node: cur.children){
                    q.offer(node);
                }
            }
            res.add(list);
        }
        return res;
    }
}

2. BFS 

Firstly we add the root to queue, then for each level we create a new arraylist, and iterate all nodes in current queue, add its value to current arraylist, and store its child to queue.

Cuz we already have the length of this level, so we don't need to worry about those kids nodes.

原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13278165.html