• 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.

  • 相关阅读:
    【学习笔记】《架构整洁之道》(2)
    【学习笔记】《架构整洁之道》(1)
    《漫长的婚约》
    My 2020 work schedule
    canal-clientadapter 数据同步实验
    confluence异常关闭恢复
    nginx 添加第三方nginx_upstream_check_module 模块实现健康状态检测
    keepalived问题阐述及配置
    keepalived+lvs 部署
    lvs基础
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13278165.html
Copyright © 2020-2023  润新知