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

devtools/2024/10/10 23:06:16/

LeetCode Hot100 | Day27 | 二叉树二叉树的直径

主要学习内容:

二叉树深度求法

深度的 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.ppmy.cn/devtools/122021.html

相关文章

指针赋值or常数赋值

int main (){int a 10;int b ;b a;int *c &a;int *d c; } 常数 a,b赋值: 都是将存储的值(10)赋值给别人。 指针赋值也是类似的: 指针存储的值(&a)为地址,就是把c指向的地址赋值给…

MongoDB的查询/超详细/表达式符号

表达式符号列表 相等 $eq: 等于。 大于 $gt: 大于。 小于 $lt: 小于。 大于等于 $gte: 大于等于。 小于等于 $lte: 小于等于。 不等于 $ne: 不等于。 逻辑 AND $and: 逻辑与。 逻辑 OR $or: 逻辑或。 逻辑 NOR $nor: 逻辑非或。 逻辑 NOT $not: 逻辑非。 数组元素匹配 $all: 字…

计算机网络:物理层 —— 物理层下的传输媒体

文章目录 传输媒体导向性媒体同轴电缆双绞线光纤光纤分类中心波长光纤规格光纤的优缺点 非导向性媒体ISM 频段无线电波微波激光红外线可见光 传输媒体 传输媒体是计算机网络设备之间的物理通路,也称为传输介质或传输媒介,并不包含在计算机网络体系结构中…

GitHub入门与实践

1.GitHub入门与实践 参考资料:《GitHub入门与实践》 声明:本篇博客内容由笔者跟随该书进行实际操作并记录过程而来,该篇博客内容大部分来自上述提到的书中。 GitHub入门与实践 1.GitHub入门与实践1.1 对本地计算机里安装的 Git 进行设置1.2 …

(九)Shell 脚本(四):正则表达式、sed 和 awk 详解

一、正则表达式 正则表达式的作用和类型 作用:用于匹配满足特定条件的内容。类型:分为基础正则表达式和扩展正则表达式。 正则表达式的区别 基础正则表达式:使用 grep 或者 awk 对数据进行匹配、过滤和显示。扩展正则表达式:使用 …

macOS 开发环境配置与应用开发

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

YOLOv8改进线性注意力模块 ICCV2023 FLatten Transformer

1,原理部分 论文地址:2308.00442 (arxiv.org) 在将 Transformer 模型应用于视觉任务时,自我注意的二次计算复杂性一直是一个持续的挑战。另一方面,线性注意力通过精心设计的映射函数近似 Softmax 操作,通过其线性复杂性提供了一种更有效的替代方案。然而,当前的线性注意…

对于基础汇编的趣味认识

汇编语言 机器指令 机器语言是机器指令的集合 机器指令展开来讲就是一台机器可以正确执行的命令 电子计算机的机器指令是一列二进制数字 (计算机将其转变为一列高低电平,使得计算机的电子器件受到驱动,进行运算 寄存器:微处理器…