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

LeetCode 热题 100 | 二叉树(二)

目录

1  543. 二叉树的直径

2  102. 二叉树的层序遍历

3  108. 将有序数组转换为二叉搜索树


菜鸟做题,语言是 C++

1  543. 二叉树的直径

这道题和  124. 二叉树中的最大路径和  太像了

题眼:二叉树的 直径 是指树中任意两个节点之间 最长路径的长度 。

简而言之,就是找出一条路径,且这条路径上的节点最多。

解题思路:

  • 从下往上遍历二叉树
  • 当前子树中的最长路径 = 1 + 左子树中的最长路径 + 右子树中的最长路径
  • 向父节点自荐当前子树中的最长路径 = 1 + max(左子树中的最长路径,右子树中的最长路径)

为什么必须从 “左子树中的最长路径” 和 “右子树中的最长路径” 中选一个?不能都要吗?当然不行。我们要的是一条笔直的路径,如果左右子树都带上,那不就分叉了吗。

思路说明图:

对于绿色节点,在它作为根节点的子树中,最长路径 = 1 + 左子树中的最长路径 + 右子树中的最长路径;绿色节点(左子节点)向蓝色节点(父节点)自荐,自荐的最长路径 = 1 + max(左子树中的最长路径,右子树中的最长路径)。对于蓝色节点,在它作为根节点的子树中,最长路径 = 1 + 左子树中的最长路径 + 右子树中的最长路径。以此类推。

class Solution {
public:int ans = 1;int helper(TreeNode * root) {if (!root) return 0;int ltree = helper(root->left);int rtree = helper(root->right);ans = max(ans, 1 + ltree + rtree);return 1 + max(ltree, rtree);}int diameterOfBinaryTree(TreeNode* root) {helper(root);return ans - 1;}
};

说明:我们算的其实是最多节点数,而路径长度是边的条数,因此需要减一:

return ans - 1;

2  102. 二叉树的层序遍历

是循环,不是递归

层序遍历:逐层地,从左到右访问所有节点。

解题思路:

  • 出队:从左到右遍历当前层中的每个节点
  • 入队:将每个节点的左右子节点存入队列中
  • 出队:从左到右遍历左右子节点,即下一层中的每个节点

具体代码:

① 循环条件:当队列中还有节点没有被遍历时,即队列长度不为 0 时。

while (q.size()) {}

② 遍历某一层中的所有节点:

int currentLevelSize = q.size();
for (int i = 0; i < currentLevelSize; ++i) {TreeNode * node = q.front();q.pop();// ...
}

此时队列的大小等于当前层中的节点个数。

③ 存入每个节点的左右子节点,即下一层中的所有节点。

if (node->left) q.push(node->left);
if (node->right) q.push(node->right);

只有节点不为空时才需要被访问。

class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {if (!root) return {};vector<vector<int>> ans;queue<TreeNode *> q;q.push(root);while (q.size()) {int currentLevelSize = q.size();ans.push_back(vector<int> ());for (int i = 0; i < currentLevelSize; ++i) {TreeNode * node = q.front();q.pop();ans.back().push_back(node->val);if (node->left) q.push(node->left);if (node->right) q.push(node->right);}}return ans;}
};

3  108. 将有序数组转换为二叉搜索树

与对 105. 从前序与中序遍历序列构造二叉树 的理解有一点点像

可以理解成:将有序数组视为中序遍历的结果,并将其还原回二叉树。

中序遍历的结果数组的特点:(左子树,根节点,右子树)

题眼:高度平衡二叉树 是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。因此,我们每次都取数组区间的中间值为根节点,代码如下:

int mid = (left + right) / 2;

完整代码:

class Solution {
public:TreeNode* helper(vector<int>& nums, int left, int right) {if (left > right) return nullptr;int mid = (left + right) / 2;TreeNode* root = new TreeNode(nums[mid]);root->left = helper(nums, left, mid - 1);root->right = helper(nums, mid + 1, right);return root;}TreeNode* sortedArrayToBST(vector<int>& nums) {return helper(nums, 0, nums.size() - 1);}
};

相关文章:

LeetCode 热题 100 | 二叉树(二)

目录 1 543. 二叉树的直径 2 102. 二叉树的层序遍历 3 108. 将有序数组转换为二叉搜索树 菜鸟做题&#xff0c;语言是 C 1 543. 二叉树的直径 这道题和 124. 二叉树中的最大路径和 太像了 题眼&#xff1a;二叉树的 直径 是指树中任意两个节点之间 最长路径的长度 。…...

mini-spring|定义标记类型Aware接口,实现感知容器对象

**前言&#xff1a;**如果我们想获得 Spring 框架提供的 BeanFactory、ApplicationContext、BeanClassLoader等这些能力做一些扩展框架的使用时该怎么操作呢。所以我们本章节希望在 Spring 框架中提供一种能感知容器操作的接口&#xff0c;如果谁实现了这样的一个接口&#xff…...

83. 删除排序链表中的重复元素

给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 输入:head = [1,1,2] 输出:[1,2] 输入:head = [1,1,2,3,3] 输出:[1,2,3] 提示: 链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链表已…...

贪心算法

贪心算法 例题1、股票买卖题目信息思路题解 2、货仓选址题目信息思路题解 3、糖果传递题目信息思路题解 4、雷达设备题目信息思路题解 例题 1、股票买卖 题目信息 思路 相邻两天&#xff0c;后>前&#xff0c;则交易一次 题解 #include <bits/stdc.h> #define en…...

MySQL基本知识

目录 一&#xff0c;MySQL的元数据库 1.1.什么是元数据库 1.2.有哪些元数据库 1.3.切换数据库 二&#xff0c;账户管理 2.1.设置权限 2.2.授权用户 2.3.查看权限 2.4.撤销权限 三&#xff0c;MySQL引擎 3.1什么是数据库引擎 3.2.查看数据引擎 3.3.MyISAM引擎 3.4…...

Vue3 (unplugin-auto-import自动导入的使用)

安装 参考链接 npm i -D unplugin-auto-importvite.config.ts里面配置 import AutoImport from unplugin-auto-import/viteAutoImport({imports:[ vue,vue-router]})重新运行项目会生成一个auto-imports.d.ts的文件 /* eslint-disable */ /* prettier-ignore */ // ts-nochec…...

【漏洞复现】大华智慧园区综合管理平台信息泄露漏洞

Nx01 产品简介 大华智慧园区综合管理平台是一款综合管理平台&#xff0c;具备园区运营、资源调配和智能服务等功能。该平台旨在协助优化园区资源分配&#xff0c;满足多元化的管理需求&#xff0c;同时通过提供智能服务&#xff0c;增强使用体验。 Nx02 漏洞描述 大华智慧园区…...

JavaScript的书写方式

JavaScript的书写方式 目前较为流行的是第二种和第三种&#xff0c;第一种很少见。在第二种和第三种推荐使用第三种&#xff0c;因为在日常开发/工作中&#xff0c;第三种是最为常见的 1.行内式 把JS代码嵌入到html元素内部 示例代码 运行效果 由于JS中字符串常量可以使用单引…...

第二十篇-推荐-纯CPU(E5-2680)推理-llama.cpp-qwen1_5-72b-chat-q4_k_m.gguf

环境 系统&#xff1a;CentOS-7 CPU&#xff1a; Intel Xeon CPU E5-2680 v4 2.40GHz 14C28T 内存&#xff1a; 48G DDR3 依赖安装 make --version GNU Make 4.3gcc --version gcc (GCC) 11.2.1 20220127 (Red Hat 11.2.1-9)g --version g (GCC) 11.2.1 20220127 (Red Hat …...

CSS常见选择器

CSS常见选择器 在Web开发中&#xff0c;层叠样式表&#xff08;CSS&#xff09;是用于描述HTML或XML&#xff08;包括SVG和XHTML等其他XML语言&#xff09;文档的样式的语言。CSS描述了文档的表现形式&#xff0c;包括布局、颜色和字体等。在CSS中&#xff0c;选择器是一种模式…...

[LWC] Components Communication

目录 Overview ​Summary Sample Code 1. Parent -> Child - Public Setter / Property / Function a. Public Property b. Public getters and setters c. Public Methods 2. Child -> Parent - Custom Event 3. Unrelated Components - LMS (Lightning Message…...

Unity中URP实现水体(水下的扭曲)

文章目录 前言一、使用一张法线纹理&#xff0c;作为水下扭曲的纹理1、在属性面板定义一个纹理&#xff0c;用于传入法线贴图2、在Pass中&#xff0c;定义对应的纹理和采样器3、在常量缓冲区&#xff0c;申明修改 Tilling 和 Offset 的ST4、在顶点着色器&#xff0c;计算得到 应…...

anaconda指定目录创建环境无效/环境无法创建到指定位置

已经设置目录到D盘 创建环境时还是分配到C盘 可能是指定位置没有开启读写权限&#xff0c;如我在这里安装到了anaconda文件夹&#xff0c;则打开该文件夹的属性->安全->编辑 allusers下的权限全都打勾...

《Docker极简教程》--Docker在生产环境的应用--Docker在生产环境的部署

一、准备工作 1.1 硬件和基础设施要求 硬件和基础设施要求是在部署 Docker 到生产环境之前需要认真考虑和准备的重要方面&#xff0c;以下是一般性的要求&#xff1a; 服务器硬件&#xff1a; CPU&#xff1a;建议使用多核处理器&#xff0c;以支持同时运行多个容器。内存&a…...

算法D31 | 贪心算法1 | 455.分发饼干 376. 摆动序列 53. 最大子序和

贪心算法其实就是没有什么规律可言&#xff0c;所以大家了解贪心算法 就了解它没有规律的本质就够了。 不用花心思去研究其规律&#xff0c; 没有思路就立刻看题解。 基本贪心的题目 有两个极端&#xff0c;要不就是特简单&#xff0c;要不就是死活想不出来。 学完贪心之后再…...

在IDEA中创建vue hello-world项目

工作中最近在接触vue前端项目&#xff0c;记录一下从0搭建一个vue hello world项目的步骤 1、本地电脑安装配置node、npm D:\Project\vue\hello-world>node -v v14.21.3 D:\Project\vue\hello-world>npm -v 6.14.18 D:\Project\vue\hello-world> 2、设置npm国内淘…...

如何获取pnpm存储目录

现在你可以做 得到&#xff1a;\path\to.pnpm-store\v3 pnpm store path注&#xff1a;从v7.0.0开始&#xff0c;pnpm 存储位于不同的文件夹中。它将位于$XDG_DATA_HOMELinux Linux : ~/.local/share/pnpm/store (default) Windows : C:\Users\YOUR_NAME\AppData\Local\pn…...

QT两个类之间使用信号槽

在做一些东西的时候&#xff0c;习惯性的引入头文件并且调用&#xff0c;因此出现了很多bug,qt的信号槽机制便可以有效的避免一些问题。 A类 #ifndef A_H #define A_H#include <QObject> #include <QDebug> class A : public QObject {Q_OBJECT public:explicit A…...

【Ubuntu】使用WSL安装Ubuntu

WSL 适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能&#xff0c;可用于在 Windows 计算机上运行 Linux 环境&#xff0c;而无需单独的虚拟机或双引导。 WSL 旨在为希望同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。安装 Linux 发行版时&#xff0c…...

【Node.js】自动生成 API 文档

目录 1、直接使用swagger-ui-express 2、配合swagger-jsdoc 如何在Node.js项目中使用 Swagger 来自动生成 API接口文档&#xff0c;使用生成方式有很多种。本文基于swagger-jsdocswagger-ui-express快速实现 1、直接使用swagger-ui-express // 方便来浏览和测试api npm i sw…...

终极指南:如何用PvZWidescreen模组彻底解决《植物大战僵尸》宽屏黑边问题

终极指南&#xff1a;如何用PvZWidescreen模组彻底解决《植物大战僵尸》宽屏黑边问题 【免费下载链接】PvZWidescreen Widescreen mod for Plants vs Zombies 项目地址: https://gitcode.com/gh_mirrors/pv/PvZWidescreen 还在为《植物大战僵尸》两侧的黑边烦恼吗&#…...

从‘MOVED’错误到丝滑重定向:深入理解Redis集群客户端如何与16384个Slot打交道

从‘MOVED’错误到丝滑重定向&#xff1a;深入理解Redis集群客户端如何与16384个Slot打交道 当你第一次在Redis集群中执行SET user:1001 "Alice"时&#xff0c;可能会遇到一个令人困惑的错误——MOVED 1234 192.168.1.2:6379。这个看似简单的错误消息背后&#xff0c…...

Matchering 在直播和播客中的应用:实时音频优化的可能性

Matchering 在直播和播客中的应用&#xff1a;实时音频优化的可能性 【免费下载链接】matchering &#x1f39a;️ Open Source Audio Matching and Mastering 项目地址: https://gitcode.com/gh_mirrors/ma/matchering Matchering 是一款开源音频匹配与母带处理工具&am…...

R3nzSkin国服换肤工具:英雄联盟国服免费皮肤修改器完整教程

R3nzSkin国服换肤工具&#xff1a;英雄联盟国服免费皮肤修改器完整教程 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server R3nzSkin国服特供版是一款专为英…...

Mac新手必看:保姆级Git+SourceTree配置指南,从安装到拉取代码一气呵成

Mac新手必看&#xff1a;保姆级GitSourceTree配置指南&#xff0c;从安装到拉取代码一气呵成 刚接触开发的Mac用户&#xff0c;面对Git命令行操作往往一头雾水。SourceTree作为图形化工具能大幅降低学习门槛&#xff0c;但初始配置过程仍可能让新手手足无措。本文将用最直观的方…...

看得见的数据结构:Android可视化学习终极指南

看得见的数据结构&#xff1a;Android可视化学习终极指南 【免费下载链接】DS4Android 看得见的数据结构Android版---Show the Data_Structure power by Android View 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Android 你是否曾在学习数据结构时感到困惑&#…...

CSS如何制作导航栏平滑滚动到锚点位置_使用scroll-behavior平滑属性

scroll-behavior: smooth 最常见失效原因是未正确作用于滚动容器&#xff0c;应设在 html 上而非 body&#xff1b;与 sticky 导航栏冲突时需用 scroll-margin-top 为锚点元素留白&#xff1b;Safari 15.4 才支持 smooth&#xff0c;15.0–15.3 及所有 IE 不支持。scroll-behav…...

2026届学术党必备的十大AI辅助写作神器推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智慧助力学术写作现今已然成了现实&#xff0c;当下&#xff0c;大型语言模组能够以效率…...

别再死磕单层AHB了!用Multi-Layer AHB搭建高性能SoC的保姆级思路

解锁Multi-Layer AHB&#xff1a;复杂SoC设计的性能加速器 当你在设计一个需要同时处理CPU运算、DMA数据传输和GPU渲染的复杂SoC时&#xff0c;传统的单层AHB总线架构很快就会成为性能瓶颈。想象一下早高峰的地铁站&#xff0c;如果所有人只能通过一个闸机进出会是怎样的场景—…...

不止是‘网络中心’:拆解中科院CNIC那些你可能不知道的硬核部门(大数据/AI/安全)

中科院CNIC技术部门全景&#xff1a;从大数据到网络安全的硬核实战指南 推开中科院计算机网络信息中心&#xff08;CNIC&#xff09;那扇看似普通的玻璃门&#xff0c;你会发现这里远不止是传统认知中的"网络中心"。在这个被简称为"网络中心"的机构里&…...