首页 > 其他分享 >第六章二叉树——二叉树的最大深度

第六章二叉树——二叉树的最大深度

时间:2024-03-14 20:31:22浏览次数:18  
标签:TreeNode 递归 val int 二叉树 深度 第六章 节点

吾日三省吾身

还记得的梦想吗

正在努力实现它吗

可以坚持下去吗

目录

吾日三省吾身

力扣题号:104. 二叉树的最大深度 - 力扣(LeetCode)

题目描述:

思路

解法一:递归

实现思路

代码逻辑解释

注意事项

代码实现

内存优化

总结


(╯°□°)╯︵ ┻━┻(⌐■_■)
(¬‿¬)(´・ω・`)
( ͡° ͜ʖ ͡°)(づ ̄ ³ ̄)づ

 


力扣题号:104. 二叉树的最大深度 - 力扣(LeetCode)

注:下述题目描述和示例均来自力扣

题目描述:

给定一个二叉树 root ,返回其最大深度。

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

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:3

示例 2:

输入:root = [1,null,2]
输出:2

提示:

  • 树中节点的数量在 [0, 104] 区间内。
  • -100 <= Node.val <= 100


思路

解法一:递归

实现思路
  1. 递归计算深度: 通过递归的方式,计算每个节点的左右子树的深度,然后选择较大的那个作为当前节点的深度。

  2. 递归终止条件: 当节点为空时,返回深度0。

  3. 递归返回: 将每个节点的左右子树的深度进行比较,并加上当前节点,得到当前节点的深度。

代码逻辑解释
  • 使用递归方式计算每个节点的深度,每次递归都会比较左右子树的深度,并选择较大的那个作为当前节点的深度。
  • 递归终止条件为节点为空,此时返回深度0。
  • 在递归返回时,选择左右子树的深度中的较大值,并加上1,即可得到当前节点的深度。
注意事项
  • 通过递归计算每个节点的深度,遍历整棵树,并选择最大的深度作为结果。
  • 使用了递归的方式,简化了代码的实现,并且符合二叉树的特性。
代码实现
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    // 计算二叉树的最大深度
    public int maxDepth(TreeNode root) {
        // 调用递归方法,获取最大深度
        int max = chooseMax(root);
        return max;
    }

    // 辅助方法,递归计算节点的最大深度
    public int chooseMax(TreeNode node){
        // 递归终止条件:节点为空,深度为0
        if (node == null){
            return 0;
        }
        // 递归计算左右子树的深度
        int leftMax = chooseMax(node.left);
        int rightMax = chooseMax(node.right);
        
        // 当前节点的深度为左右子树中的较大深度加1
        int depth = Math.max(leftMax, rightMax) + 1;
        return depth;
    }
}

 

内存优化
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    // 计算二叉树的最大深度
    public int maxDepth(TreeNode root) {
        // 调用递归方法,获取最大深度
        return chooseMax(root);
    }

    // 辅助方法,递归计算节点的最大深度
    public int chooseMax(TreeNode node){
        // 递归终止条件:节点为空,深度为0
        if (node == null){
            return 0;
        }
        // 递归计算左右子树的深度
        // 当前节点的深度为左右子树中的较大深度加1
        return Math.max(chooseMax(node.left), chooseMax(node.right)) + 1;
    }
}


总结

不总结了,谢谢各位,累了

 

标签:TreeNode,递归,val,int,二叉树,深度,第六章,节点
From: https://blog.csdn.net/DDDDWJDDDD/article/details/136720571

相关文章

  • 236. 二叉树的最近公共祖先c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*lowestCommonAncestor(structTreeNode*root,structTreeNode*p,structTreeNode*q){......
  • 【深度学习实践】HaGRID,YOLOv5,手势识别项目,目标检测实践项目
    文章目录数据集介绍下载数据集将数据集转换为yolo绘制几张图片看看数据样子思考类别是否转换下载yolov5修改数据集样式以符合yolov5创建dataset.yaml训练参数开始训练训练分析推理模型转换onnx重训一个yolov5s后记数据集介绍https://github.com/hukenovs/hagridHaG......
  • 毕业设计:基于深度学习的人脸识别性别检测系统
    目录 前言设计思路一、课题背景与意义二、算法理论原理2.1神经网络轻量化2.2权值回退方法三、检测的实现3.1数据集3.2实验环境搭建3.3实验及结果分析最后前言    ......
  • leedcode-完全二叉树的节点个数
    自己写的,使用广度优先BFS,迭代:classSolution:defcountNodes(self,root:Optional[TreeNode])->int:#如果根节点为空,则树中节点数为0ifnotroot:return0#初始化队列,并将根节点放入队列中queue=[root]......
  • 洛谷题单指南-二叉树-P5076 【深基16.例7】普通二叉树(简化版)
    原题链接:https://www.luogu.com.cn/problem/P5076题意解读:此题本质上是要实现一个二叉搜索树的功能。解题思路:从数据规模10^4来看,只要复杂度在n^2范围内基本上是可以通过的,下面给出两种做法:1、有序数组法对应5个操作的实现逻辑如下:操作一:查x的排名。直接通过二分查找>=x的第......
  • 三维深度成像激光雷达在无人叉车技术中的关键作用
    无人叉车是指无人驾驶的叉车,它可以在仓库、工厂等场所自主进行货物搬运和堆垛操作。激光雷达在无人叉车中扮演着重要的角色,用于环境感知、定位导航和避障等功能。具体来说,激光雷达在无人叉车中的应用包括以下几个方面:环境感知激光雷达可以帮助无人叉车感知周围环境,识别障碍......
  • 深度学习入门
    深度学习入门ch03:神经网络激活函数:定义:会将输入信号的总和转换为输出信号$${a=b+w1x1+w2x2}a=b+w1x1+w2x2y=h(a)$$即计算每一元素与其权重乘积及偏置总和的函数sigmoid函数:代码实现:defsigmoid(x):return1/(1+np.exp(-x)公式:h(x)=i/(1+exp(-......
  • 617. 合并二叉树c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*mergeTrees(structTreeNode*root1,structTreeNode*root2){if(!root1&&!roo......
  • 257. 二叉树的所有路径c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*//***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/chartemp[200]={0};v......
  • 06 games101-光栅化(深度测试与抗锯齿)
    06光栅化(深度测试与抗锯齿)从采样分析走样采样的对象:●在位置上采样——照片●在时间上采样——视频以下副标题均是在时域上分析。采样的瑕疵(Artifacts)Artifacts(Erros/Mistakes/Inaccuracies)●锯齿●摩尔纹●车轮效应●…走样的原因信号频率太快,采样太......