LeetCode Hot100 | Day1 | 二叉树:二叉树的直径

LeetCode Hot100 | Day1 | 二叉树:二叉树的直径

主要学习内容:

二叉树深度求法

深度的 left+right+1 得到的是从根结点到叶子结点的节点数量

543.二叉树的直径

[543. 二叉树的直径 - 力扣(LeetCode)](https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/)

解法思路:

说之前先来看一种经典的错误。。

class Solution {
public:int maxDepth=-1;int tra(TreeNode *t){if(t==nullptr)return 0;return 1+max(tra(t->left),tra(t->right));}int diameterOfBinaryTree(TreeNode* root) {if(root==nullptr)return 0;return tra(root->left)+tra(root->right);}
};

哈哈想的是,左右子树最大深度求出来一加,直接完事了,可惜的是这种是错误的

image-20241005162425862

这个是错误示例,很明显,最长的直径在右子树上,而不是左子树加右子树的深度。

不过这也启发我们,说明思路是对的,只是应该有一个记录最大值的变量,然后对每一个节点都进行一遍这个操作,把最大的记录下来就是了

那接下来就是二叉树求深度

1.函数参数和返回值

int maxDepth=-1;
int tra(TreeNode *t)

maxDepth记录最大直径,就是答案

返回值返回以当前结点为根结点的子树的深度

2.终止条件

直到没有数即没有结点要构建就是结束

if(t==nullptr)return 0;

碰到空了不加深度,直接返回0就行

3.本层代码逻辑

int left=tra(t->left);
int right=tra(t->right);
maxDepth=max(maxDepth,left+right+1);
return 1+max(left,right);

left记录左子树深度

right记录右子树深度

更新以当前结点为子树的深度(l+r+1)和maxDepth之间的大小,最大值赋值给maxDepth

更新后,返回上层递归函数当前子树的最大深度

完整代码:

class Solution {
public:int maxDepth=-1;int tra(TreeNode *t){if(t==nullptr)return 0;int left=tra(t->left);int right=tra(t->right);maxDepth=max(maxDepth,left+right+1);return 1+max(left,right);}int diameterOfBinaryTree(TreeNode* root) {if(root==nullptr)return 0;int t=tra(root);return maxDepth-1;}
};

最后注意:我们求的直径是边数,(l+r+1求的是节点数),要减去1才是边数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1556005.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【262-271】

262. 回顾上一章内容 看视频 263. IDEA介绍 263.1 IDEA 介绍 IDEA 全称 IntelliJ IDEA在业界被公认为最好的 Java 开发工具IDEA 是 JetBrains 公司的产品,总部位于捷克的首都布拉格除了支持 Java 开发,还支持 HTML,CSS,PHP&am…

Qt之TCP收发图片的例子

一.效果 二.实现 1.发图片 void MainWindow::slotSendImage() {matrix.rotate(90);QPixmap tempPixmap = pixmap.transformed(matrix);QBuffer buffer;tempPixmap.save(&buffer,"jpg");ui->labelImage->setPixmap(tempPixmap);int dataLength = buffer.d…

[图形学]在半球面上均匀采样和cos加权采样

一、简介 本文介绍了如何在半球表面上进行半球面均匀采样、半球面cos加权采样采样。 给出了相关公式推导和python代码实现。 二、在半球上采样 0.预备知识 1).球面坐标系与笛卡尔坐标系 在半球面上采样时,常使用球面坐标系。先采样球面坐标系下的坐标参数 ( θ…

python sqlite3 工具函数

起因, 目的: sqlite3 最常用的函数。 比如,某人给了一个 database.db 文件。 但是你登录的时候,不知道账号密码。 此文件就是,查看这个数据库的详细内容。 有哪些表某个表的全部内容。添加数据 代码, 见注释 impor…

《数字图像处理基础》学习01-数字图像处理的相关基础知识

这篇文章只是对数字图像处理的相关基础知识有个大概的了解,之后的文章会接着补充和扩展。 目录 一,图像的基本概念 1,图像 2,图像的分类 1)物理图像 2)虚拟图像 二,数字图像处理 三&…

PostGIS--介绍

目录 1、什么是PostGIS?2、数据2.1 对象2.1.1 读取几何元数据信息函数2.1.2 处理点的函数2.1.3 处理线的函数2.1.4 处理面的函数2.1.5 集合 2.2 集合输入和输出2.3 shapefile文件 总结PS: 1、什么是PostGIS? PostGIS通过增加对空间类型、空间索引和空间…

【MaskGAN】MaskGAN: Towards Diverse and Interactive Facial Image Manipulation

文章目录 MaskGAN: Towards Diverse and Interactive Facial Image Manipulationkey points贡献方法密集映射网络DMN编辑行为模拟训练多目标学习CelebAMask-HQ数据集实验消融实验总结MaskGAN: Towards Diverse and Interactive Facial Image Manipulation 会议/期刊:CVPR 202…

实现mnist手写数字识别

基础知识 tensorflow TensorFlow是一个开源的机器学习框架,致力于各种数据流图的自动微分和深度神经网络的计算。简而言之,** TensorFlow帮助我们轻松地构建、训练和部署机器学习模型** 。它可以在各种平台上运行,包括桌面计算机、服务器…

Dyna-slam复现(保姆级详细图文版,百分百成功)

因最近论文要和这些算法做对比,故配置了一下,在此记录 因为是老的算法,cuda版本现在的显卡都不能使用,所以笔者找的电脑是华硕飞行堡垒17年的电脑,1080的显卡 深度学习及maskrcnn配置 先将dyna-slam git下来,终端执行 git clone https://github.com/BertaBescos/Dyna…

数据结构之红黑树实现(全)

一、红黑树 红黑树是一种自平衡的二叉搜索树,它通过约束节点的颜色和结构来保持平衡。红黑树是由 Rudolf Bayer 在1972年发明的,被认为是一种优秀的平衡树结构,广泛应用于各种数据结构和算法中。 1.红黑树的性质 1. 每个结点是红的或者黑的…

PhotoMaker部署文档

一、介绍 PhotoMaker:一种高效的、个性化的文本转图像生成方法,能通过堆叠 ID 嵌入自定义逼真的人类照片。相当于把一张人的照片特征提取出来,然后可以生成你想要的不同风格照片,如写真等等。 主要特点: 在几秒钟内…

前端工程化 - Vue

环境准备 Vue-cli是Vue官方提供的一个脚手架,用户快速生成一个Vue的项目模板。 Vue-cli提供了如下功能: 统一的目录结构本地调试热部署单元测试集成打包上线 需要安装Node.js 安装Vue-cli npm install -g vue/cli通过vue --version指令查看是否安装成…

常见排序详解(历时四天,哭了,必须释放一下)

目录 1、插入排序 1.1 基本思想 1.2 直接插入排序 1.2.1 思路 1.2.2 代码实现 1.2.3 性质 1.3 希尔排序 1.3.1 思路 1.3.2 代码实践 1.3.3 性质 2、选择排序 2.1 基本思想 2.2 直接选择排序 2.2.1 思路 2.2.2 代码实践 2.2.3 性质 2.3 堆排序 2.3.1 思路 2.…

108页PPT丨OGSM战略规划框架:实现企业目标的系统化方法论

OGSM战略规划框架是一种实现企业目标的系统化方法论,它通过将组织的目标(Objectives)、目标(Goals)、策略(Strategies)和衡量指标(Measures)进行系统化整合,确…

windows下DockerDesktop命令行方式指定目录安装

windows下DockerDesktop指定目录安装(重新安装) 因为DcokerDesktop占用内存较大, 并且拉去镜像后占用本地空间较多,所以建议安装时就更改默认安装路径和镜像存储路径 这里,展示了从下载到安装的过程: 首先下载DcokerDesktop;找到Docker Desktop Installer.exe 并重命名为 do…

国内超声波清洗机哪个品牌好?力荐四款超耐用超声波清洗机!

超声波清洗机作为一款高效实用的家庭与专业清洁利器,能够迅速且彻底地清洁多样化的物件。面对市场上琳琅满目的品牌与型号,每一款都各具特色与优势,故在决定购买前做足调研显得尤为重要,以免购入不尽如人意的产品,造成…

力扣110:判断二叉树是否为平衡二叉树

利用二叉树遍历的思想编写一个判断二叉树,是否为平衡二叉树 示例 : 输入:root [3,9,20,null,null,15,7] 输出:true思想: 代码: int getDepth(struct TreeNode* node) {//如果结点不存在,返回…

打造自己的RAG解析大模型:Windows部署OCR服务(可商业应用)

在上一篇文章中,我们介绍了如何在 Windows 环境中配置 OCR 相关模型,并完成了模型验证。本篇文章将基于之前的内容,进一步讲解如何将文本检测、方向分类和文本识别模型进行串联,最终搭建一个基础的 OCR 应用服务。通过这些模型的串…

【Diffusion分割】CTS:基于一致性的医学图像分割模型

CTS: A Consistency-Based Medical Image Segmentation Model 摘要: 在医学图像分割任务中,扩散模型已显示出巨大的潜力。然而,主流的扩散模型存在采样次数多、预测结果慢等缺点。最近,作为独立生成网络的一致性模型解决了这一问…

回调函数是什么

回调函数是什么 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数时,被调⽤的函数就是回调函数。 回调函数不是由该函数的实现⽅直接调⽤&…