zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    aa
    MySQL5.8下载及安装——免安装版
    eclipse中修改项目名
    利用kibana学习 elasticsearch restful api (DSL)
    https://www.cnblogs.com/shwee/p/9084535.html
    springboot+mybatis实现动态切换数据源
    docker-machine命令安装
    Docker 安装 RabbitMq
    yum 找不到程序,yum更换国内阿里源
    CentOS安装etcd和flannel实现Docker跨物理机通信
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13278165.html
Copyright © 2011-2022 走看看