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

代码随想录刷题day41|(二叉树篇)二叉树的最大深度(递归)

目录

一、二叉树理论基础

二、二叉树的深度和高度

三、递归和迭代思路

3.1 递归法

3.2 迭代法

四、相关算法题目

五、总结


一、二叉树理论基础

详见:代码随想录刷题day34|(二叉树篇)二叉树的递归遍历-CSDN博客

二、二叉树的深度和高度

二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数;

二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数;

本题中,二叉树的最大深度=叶子节点的深度=从根节点到叶子节点的最长简单路径边的条数or节点数=根节点的高度;

一般求深度用前序遍历,求高度用后序遍历;

为什么?求深度,指的是该节点到根节点的距离,根节点的深度为1,往下逐渐递增,用前序遍历,中左右,逐步向下, 层层向下,得到该节点的深度;

求高度,指的是该节点到叶子结点的距离,叶子结点的高度为1的话,往上逐渐递增,用后续,左右中,父节点根据左右孩子的高度再加1,层层向上返回,得到该节点的高度;

所以,求二叉树的最大深度就是求根节点的高度,故可以用后序遍历;

三、递归和迭代思路

3.1 递归法

1.确定递归函数的参数和返回值

参数:需要传入根节点,返回值是高度,int类型;

2.确定终止条件

node == null,返回0;

3.确定单层递归的逻辑

按照后序遍历,先处理左节点,递归遍历左节点,求出leftHight,接着递归遍历右节点,求出rightHight,两者取较大值,再加1,也即加上本节点node所在的高度,得出从该节点node到叶子节点的高度;

最后当node = root时,结果就是根节点到叶子节点的高度,也就是叶子节点的深度,即该二叉树的最大深度;

3.2 迭代法

层序遍历,详见:代码随想录刷题day38|(二叉树篇)二叉树的层序遍历(429、515、116、117、104、111)-CSDN博客

四、相关算法题目

104.二叉树的最大深度

class Solution {//递归法:后序遍历public int maxDepth(TreeNode root) {return getHight(root);}public int getHight(TreeNode node){//终止条件if(node == null) return 0;//单层递归的逻辑int leftHight = getHight(node.left);int rightHight = getHight(node.right);int hight = 1 + Math.max(leftHight, rightHight);return hight;}
}

559.N叉树的最大深度

思路:递归法同二叉树,不同点在于孩子节点的处理,没有左右节点之分,用增强for循环遍历所有孩子节点,并递归处理;

class Solution {public int maxDepth(Node root) {//递归法return getHight(root);}public int getHight(Node node){int max = 0;//记录当前节点的所有子节点的最大深度if(node == null) return 0;for(Node child : node.children){int childHight = getHight(child);max = Math.max(max, childHight);}int hight = 1 + max;return hight;}
}

五、总结

1.为什么max 放在循环外面,方法内部/

max是记录当前节点的所有子节点的最大深度,每次递归调用getHight时,max都会被重新初始化为0,然后通过遍历子节点来更新max;

2.没看前序遍历


http://www.mrgr.cn/news/93934.html

相关文章:

  • 【前端】BOM DOM
  • 打造智能钉钉机器人:借助智谱GLM-4-Flash实现高效智能回复(文末附源码)
  • 打造智能聊天体验:前端集成 DeepSeek AI 助你快速上手
  • 我的AI工具箱Tauri版-建筑平面图生成装修设计
  • 个人学习编程(3-10) 刷题
  • Jetson Orin 安装 onnxruntime
  • LSTM方法实践——基于LSTM的汽车销量时序建模与预测分析
  • 基金股票期权期货投资方式对比
  • 软考 数据通信基础——信道
  • 【SoC基础】第2节:CPU简介
  • DeepSeek本地化部署与跨域访问架构构建
  • ngx_regex_create_conf
  • 多视图几何--相机标定--从0-1理解张正友标定法
  • 【Go每日一练】统计字符出现的次数
  • Nuxt.js 全栈开发指南:构建现代 Web 应用的终极解决方案
  • 【09】单片机编程核心技巧:变量赋值,从定义到存储的底层逻辑
  • 最大括号深度
  • 一二三应用开发平台——能力扩展:多数据源支持
  • 「string」笔记
  • 优选算法系列(1. 双指针_上)