写点什么

【LeetCode】N 叉树的最大深度 Java 题解

作者:HQ数字卡
  • 2021 年 11 月 21 日
  • 本文字数:864 字

    阅读完需:约 3 分钟

题目描述

给定一个 N 叉树,找到其最大深度。


最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。


N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。



示例 1:
输入:root = [1,null,3,2,4,null,5,6]输出:3
示例 2:
输入: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]输出:5
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 今天的算法每日一题是树相关的题目,题目要求求最大深度,最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。

  • N 叉树的求解,可能不容易直接想到。我们先简化问题,当 N = 2 的时候,即位求二叉树的最大深度。对于二叉树而言,最大深度,就是 Math.max(leftDepth, rightDepth) + 1。我们一般采用递归的方式求解,递归的终止条件是 root == null, return null。每层需要处理的是求当前层的最大深度。

  • 根据二叉树的思想,我们推广到 n 叉树,即为求每一个子节点的最大深度,实现代码如下:

通过代码

/*// Definition for a Node.class Node {    public int val;    public List<Node> children;
public Node() {}
public Node(int _val) { val = _val; }
public Node(int _val, List<Node> _children) { val = _val; children = _children; }};*/
class Solution { public int maxDepth(Node root) { if (root == null) { return 0; } int maxChildDepth = 0; List<Node> children = root.children; for (Node child : children) { int childDepth = maxDepth(child); maxChildDepth = Math.max(maxChildDepth, childDepth); } return maxChildDepth + 1; }}
复制代码

总结

  • 递归算法的时间复杂度是 O(n),空间复杂度是 O(n)

  • 坚持算法每日一题,加油!

发布于: 56 分钟前阅读数: 4
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】N 叉树的最大深度Java题解