zoukankan      html  css  js  c++  java
  • LeetCode 429. N-ary Tree Level Order Traversal

    原题链接在这里:https://leetcode.com/problems/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]

    题解:

    When iterating by BFS, for current level node, accumulate the count of next level using node's children.

    When current level node count == 0, add current list to res, empty current list and comes to next level.

    Time Complexity: O(V+E). V is node count. E is edge count.

    Space: O(V).

    AC Java:

     1 /*
     2 // Definition for a Node.
     3 class Node {
     4     public int val;
     5     public List<Node> children;
     6 
     7     public Node() {}
     8 
     9     public Node(int _val) {
    10         val = _val;
    11     }
    12 
    13     public Node(int _val, List<Node> _children) {
    14         val = _val;
    15         children = _children;
    16     }
    17 };
    18 */
    19 class Solution {
    20     public List<List<Integer>> levelOrder(Node root) {
    21         List<List<Integer>> res = new ArrayList<>();
    22         if(root == null){
    23             return res;
    24         }
    25         
    26         LinkedList<Node> que = new LinkedList<>();
    27         que.add(root);
    28         int curCount = 1;
    29         int nextCount = 0;
    30         List<Integer> item = new ArrayList<>();
    31         while(!que.isEmpty()){
    32             Node cur = que.poll();
    33             curCount--;
    34             item.add(cur.val);
    35             
    36             for(Node child : cur.children){
    37                 que.add(child);
    38                 nextCount++;
    39             }
    40             
    41             if(curCount == 0){
    42                 curCount = nextCount;
    43                 nextCount = 0;
    44                 
    45                 res.add(new ArrayList<Integer>(item));
    46                 item = new ArrayList<>();
    47             }
    48         }
    49         
    50         return res;
    51     }
    52 }

    类似Binary Tree Level Order Traversal.

  • 相关阅读:
    拷贝构造函数与赋值运算符的区别(待完善)
    概念学习(Concept Learning)
    函数对象适配器之ptr_fun的使用示例
    SynchronizationContext的研究之一(非WPF及Forms)
    ESLint
    Vue CLI 4.0 关于 webpack 基本配置范例
    Hdu3787
    Cf393A
    Cf387A
    Cf386B
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/11922285.html
Copyright © 2011-2022 走看看