• [LeetCode] 559. Maximum Depth of N-ary Tree


    Given a n-ary tree, find its maximum depth.

    The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

    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: 3
    

    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: 5

    Constraints:

    • The depth of the n-ary tree is less than or equal to 1000.
    • The total number of nodes is between [0, 10^4].

    多叉树的最大深度。这个题跟104题非常接近,唯一不同的是104题是二叉树,此题是多叉树。这个题可以用两种思路做,分别是BFS和DFS。两种做法的时间和空间复杂度都是O(n)

    BFS

    JavaScript实现

     1 /**
     2  * @param {Node} root
     3  * @return {number}
     4  */
     5 var maxDepth = function (root) {
     6     if (root === null) return 0;
     7     let depth = 0;
     8     let queue = [root];
     9     while (queue.length) {
    10         let size = queue.length;
    11         for (let i = 0; i < size; i++) {
    12             let cur = queue.shift();
    13             queue.push(...cur.children);
    14         }
    15         depth++;
    16     }
    17     return depth;
    18 };

    Java实现

     1 class Solution {
     2     public int maxDepth(Node root) {
     3         if (root == null) {
     4             return 0;
     5         }
     6         int depth = 0;
     7         Queue<Node> queue = new LinkedList<>();
     8         queue.offer(root);
     9         while (!queue.isEmpty()) {
    10             int size = queue.size();
    11             for (int i = 0; i < size; i++) {
    12                 Node cur = queue.poll();
    13                 for (Node child : cur.children) {
    14                     queue.offer(child);
    15                 }
    16             }
    17             depth++;
    18         }
    19         return depth;
    20     }
    21 }

    DFS

    JavaScript实现

     1 /**
     2  * @param {Node} root
     3  * @return {number}
     4  */
     5 var maxDepth = function (root) {
     6     if (root === null) return 0;
     7     let res = 0;
     8     for (let child of root.children) {
     9         res = Math.max(res, maxDepth(child));
    10     }
    11     return res + 1;
    12 };

    Java实现

     1 class Solution {
     2     public int maxDepth(Node root) {
     3         if (root == null) {
     4             return 0;
     5         }
     6         int res = 0;
     7         for (Node child : root.children) {
     8             res = Math.max(res, maxDepth(child));
     9         }
    10         return res + 1;
    11     }
    12 }

    LeetCode 题目总结

  • 相关阅读:
    AtCoder Grand Contest 030题解
    Codeforces Round #542 (Div. 1) 题解
    ZJOI2019赛季回顾
    UOJ #450「集训队作业2018」复读机
    「IOI2018」狼人
    APIO2019游记
    BZOJ4314 倍数?倍数!
    伯努利数学习笔记&&Luogu P3711 仓鼠的数学题
    Codeforces Round #541 (Div. 2)题解
    UOJ #460 新年的拯救计划
  • 原文地址:https://www.cnblogs.com/cnoodle/p/12191905.html
Copyright © 2020-2023  润新知