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.

  • 相关阅读:
    开源交易所源码搜集
    域名
    国外大牛博客
    Fomo3D代码分析以及漏洞攻击演示
    Small组件化重构安卓项目
    html span和div的区别
    七牛云
    以太坊钱包安全性保证
    跨域问题
    checkout 到bit/master分支
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13278165.html
Copyright © 2011-2022 走看看