当前位置: 首页 > news >正文

LeetCode104. 二叉树的最大深度和N叉树的最大深度

1 题目描述

给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7],
在这里插入图片描述
返回它的最大深度 3 。

来源:力扣(LeetCode)
链接:104. 二叉树的最大深度

2 算法设计

2.1 求二叉树的最大深度

本题可以使用递归的方式求求树的深度。这里需要明确树的节点深度和节点高度这两个概念。

  • 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)
  • 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数后者节点数(取决于高度从0开始还是从1开始)
    而根节点的高度就是二叉树的最大深度。
    (1)确定递归的出口,即终止条件:如果为空节点就返回0,表示高度为0。
    (2)确定单层递归逻辑:可以先求左子树的深度,再求右子树的深度,最后取左右子树最大的值就是再加1(加1是算上当前的中间节点)就是以当前节点为根节点的树的深度。

2.2 求N叉树的最大深度

同理,求二叉树的最大深度的方法同样适用于求N叉树的最大深度,唯一不同的就是再遍历节点的孩子节点时N叉树的孩子节点为一个数组,需要逐一进行遍历,递归。

3 代码设计

3.1 二叉树的最大深度

  public int maxDepth(TreeNode root) {
       if (root == null) return 0;
       int leftLength = maxDepth(root.left);
       int rightLnegth = maxDepth(root.right);
       return Math.max(leftLength,rightLnegth)+1;
    }

3.2 N叉树的最大深度

public int maxDepth(Node root) {
     if (root == null) return 0;
     int depth = 0;
     if (root.children != null){
         for (Node child : root.children){
             depth = Math.max(depth,maxDepth(child));
         }
     }
     return depth+1;
    }

4 测试结果

4.1 求二叉树的最大深度

在这里插入图片描述

4.2 求N叉树的最大深度

在这里插入图片描述

相关文章:

  • Games104 引擎工具链笔记
  • 如何梳理当天的事情?
  • 【历年NeurIPS论文下载】一文了解NeurIPS国际顶会(含NeurIPS2022)
  • 《JVM学习笔记》字节码基础
  • Java 学习 --SpringBoot 常用注解详解
  • 基于springboot网上书城系统
  • Java项目:JSP药店药品商城管理系统
  • app启动流程
  • 程序员的民宿情结
  • PD 重要监控指标详解
  • 数字集成电路(中)
  • 为什么Spring中的bean默认都是单例模式?
  • 【日常需求】一次使用EasyExcel而引发的问题与思考~
  • Docker 镜像拉取
  • Android 12 蓝牙打开
  • 深入了解以太坊
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Django 博客开发教程 16 - 统计文章阅读量
  • gcc介绍及安装
  • IOS评论框不贴底(ios12新bug)
  • MaxCompute访问TableStore(OTS) 数据
  • node.js
  • Python打包系统简单入门
  • React-生命周期杂记
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 协程
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 移动端 h5开发相关内容总结(三)
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • ​力扣解法汇总946-验证栈序列
  • #微信小程序:微信小程序常见的配置传旨
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (C语言)fgets与fputs函数详解
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)fiber的基本认识
  • (二)springcloud实战之config配置中心
  • (十一)c52学习之旅-动态数码管
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .bashrc在哪里,alias妙用
  • .Net 垃圾回收机制原理(二)
  • .net 使用ajax控件后如何调用前端脚本
  • .NET 中的轻量级线程安全
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET中两种OCR方式对比
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [<事务专题>]
  • [AR Foundation] 人脸检测的流程
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [BZOJ3757] 苹果树