[LeetCode] 559. N叉树的最大深度

本文介绍了解决N叉树最大深度问题的两种方法:递归和迭代。递归方法通过深度优先搜索求出每个子树的最大深度,迭代方法则采用层序遍历的方式。文章提供了详细的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 题目描述

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

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

例如,给定一个 3叉树 :
在这里插入图片描述
我们应返回其最大深度,3。

说明:

树的深度不会超过 1000。
树的节点总不会超过 5000。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处

2 解题思路

  • 方法一 递归

递归终止条件:root==null时,返回0
每层递归需要做的事情:分别求出当前节点子节点的最大深度,然后求出其最大值,最大值+1即为最大深度

  • 方法二 迭代

层序遍历,遍历时记录层数即可

3 解决代码

  • 方法一 递归
/*
// 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 max = 0;
    for (Node node : root.children){
        int depth = maxDepth(node);
        max = Math.max(max,depth);
    }
    //最大值+1 就是树的最大深度
    return max+1;    
    }
}
  • 方法二 迭代
/*
// 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;
        }
        //迭代:层序遍历
        Queue<Node> queue = new LinkedList<>();
        queue.add(root);
        int maxDepth =0;
        while(!queue.isEmpty()){
            int count = queue.size();
            maxDepth++;
            while(count > 0){
                count--;
                //poll //返回第一个元素,并在队列中删除
                Node cur = queue.poll();
                for(Node node:cur.children){
                    if(node != null)
                        queue.add(node);
                }
            }
        }
        return maxDepth;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值