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

力扣hot100二刷——二叉树

第二次刷题不在idea写代码,而是直接在leetcode网站上写,“逼”自己掌握常用的函数。

标志掌握程度解释办法
Fully 完全掌握看到题目就有思路,编程也很流利
⭐⭐Basically 基本掌握需要稍作思考,或者看到提示方法后能解答
⭐⭐⭐Slightly 稍微掌握需要看之前写过的代码才能想起怎么做多做
⭐⭐⭐⭐absolutely no 完全没有掌握需要看题解才知道怎么做
⭐⭐⭐⭐⭐有难度的高频题需要看题解才知道怎么做,而且过几天就忘了这道题怎么做了背背
36⭐⭐⭐Easy二叉树94/二叉树的中序遍历左-中-右 递归法,当节点不为空时 将节点的左子树传入传入递归函数 添加当前节点到list 将节点的右子树传入传入递归函数 迭代法,维护一个栈,当栈不为空 或 节点不为空时 先遍历左子树,遍历过程中将节点入栈 遍历到空节点后,栈顶元素出栈,再遍历右子树Deque stack = new ArrayDeque<>();
37⭐⭐⭐Easy二叉树104/二叉树的最大深度递归法,遇到空节点返回0 将节点的左子树传入传入递归函数,并将返回值 +1 将节点的右子树传入传入递归函数,并将返回值 +1 返回两者中较大者 return Math.max(maxDepth(root.left) + 1, maxDepth(root.right) + 1);
38⭐⭐⭐Easy二叉树226/反转二叉树递归法,遇到空节点直接返回 交换当前节点的左右子树 将节点的左子树传入传入递归函数 将节点的右子树传入传入递归函数
39⭐⭐⭐Easy二叉树101/对称二叉树递归法,递归函数的输入分别为左子树的节点和右子树的节点 两节点均为空,return true 一节点为空,另一节点不为空,return false 两节点均不为空,但值不同,return false 两节点均不为空,值相同,比较left.left 和 right.right,left.right 和 right.left,返回两个结果的与
40⭐⭐⭐Easy二叉树543/二叉树的直径递归法, 分别计算当前节点的左右子树的深度 更新目前深度最大值ans:左子树深度+右子树深度 和 ans 比较 返回的是左子树深度 和 右子树深度的较大者,而不是当目前深度的最大值
41★★★★Medium二叉树102/二叉树的层序遍历关键在于:找到一个可以标志某层节点的变量,要么是层数,要么是某层的节点个数 层数递归法,递归函数的输入参数:1.当前节点 2.当前层数 当前节点为空,直接返回 层数++ 如果当前ansList的长度 < 当前层数,说明是第一次遍历到该层,要创建一个itemList加入到 list 将当前节点加入到 ansList中 对应层数位置 的itemList中 将当前节点的左子树传入传入递归函数 将当前节点的右子树传入传入递归函数 队列迭代法,维护一个队列来遍历每层元素 首先将root根节点存入队列 开始遍历二叉树,队列为空则跳出循环 维护length记录该层的节点个数 如果当前length > 0,则移除队头节点,将节点值加入到 item 集合中,并移入该节点的左右子节点(如果不为空的话),并且length-- length == 0 则将item 加入list
42★★★★Easy二叉树108/将有序数组转换为二叉搜索树递归法,核心思想:不断分割数组,数组中间位置的值一定最适合作为当前的根节点 递归参数:数组、左边界、右边界 当左边界 ≤ 右边界时,求中间索引,把数组中间索引的值作为新的节点 令节点的左右子节点 分别 为下一轮递归返回的节点 返回当前节点 如果 左边界 > 右边界,直接返回空节点。
43★★★★Medium二叉树98/验证二叉搜索树递归法,验证二叉搜索树就是看这棵树的中序遍历的序列是否是严格递增的。 维护一个pre节点来保存上一个节点,用来和当前节点比较,初始设为null,当pre != null时再比较 当前节点为空时直接返回true 将节点的左子节点传入传入递归函数 比较当前节点和上个节点的大小,当前节点 ≤ 上个节点则return fasle 节点的右子节点传入传入递归函数 返回左子树和右子树验证结果的与操作
44Medium二叉树230/二叉搜索树中第k小的元素和上题的思路是一样的,二叉搜索树的中序遍历是严格递增的,中序遍历二叉树的第k个节点即为要找的答案 巧妙定义类变量,即可用一句话找到结果 if(–k == 0) ans = root.val;
45Medium二叉树199/二叉树的右视图层数递归法: 层数从0开始 右中左递归遍历二叉树,List<List> list 维护一个集合来存放每一层的值 递归结束后,统计每层的第一个元素的集合即为答案
46⭐⭐⭐Medium二叉树114/二叉树展开为链表反先序递归遍历:右 左 中 反先序递归遍历二叉树,从最后往最前依次完成链表 每次遍历,要更新nextNode,也就是下一个节点
47★★★★Medium二叉树105/从前序与中序遍历序列构造二叉树递归遍历,3个递归参数为preorder中当前头结点的索引、inorder中当前子树的左右边界索引 由前序遍历得到头节点,在inorder中搜索头节点,为了方便搜索,维护一个map来存放inorder的值和对应的索引 根据inorder中的头节点,将inorder划分为左右子树,并将左右子树的边界分别传入递归函数 要注意右子树的递归函数略微复杂: node.right = buildTree1(root + mid - left + 1, mid + 1, right);
48⭐⭐⭐Medium二叉树437/路经总和III前序遍历+前缀和 注意,sum和map中的键都应该是long型。 由根节点从上至下前序遍历并更新sum,每次遍历先检查map中是否包含sum - target并更新ans 将当前和在map中的次数更新 将当前节点的左子节点传入递归函数,将当前节点的右子节点传入递归函数 将当前遍历层的sum在map中的次数 - 1 将当前sum 减去 当前节点的值。
49★★★★Medium二叉树236/二叉树的最近公共祖先搞明白一件事情:只要碰到一个节点(不管是p还是q)就返回当前节点,不用再遍历下面的节点了 结束递归的条件:root == null || root == p || root == q 对于当前节点,如果只有一个子树返回值不为空,另一个子树返回值为空,说明另一个节点要么也在该子树下面,他们的共同祖先就是返回的节点;要么在其他节点下,不管怎么样都不用遍历剩下的节点。
50★★Hard二叉树124/二叉树的最大路径和后序遍历 递归结束条件,空节点返回0 当前节点的左子节点和右子节点分别传入递归函数,返回结果分别为左右子树的最大路径和 更新当前最大值 ans = Math.max(ans, leftMax + rightMax + root.val); 返回值:当前节点+左子树最大路径和、当前节点+右子树最大路径和、0 三者中的较大者

图片版:
在这里插入图片描述

相关文章:

力扣hot100二刷——二叉树

第二次刷题不在idea写代码&#xff0c;而是直接在leetcode网站上写&#xff0c;“逼”自己掌握常用的函数。 标志掌握程度解释办法⭐Fully 完全掌握看到题目就有思路&#xff0c;编程也很流利⭐⭐Basically 基本掌握需要稍作思考&#xff0c;或者看到提示方法后能解答⭐⭐⭐Sl…...

企业安全——数据泄露防护

0x00 前言 本篇对数据泄露防护方面的内容进行汇总和总结&#xff0c;为抛砖引玉的内容 0x01 数据隔离 数据隔离是防止数据泄露的一个非常好的方式&#xff0c;通常的隔离方式有 主机/服务器隔离网络隔离介质隔离 0x02 数据丢失预防 主要防止数据丢失的方法就是DLP&#x…...

字符串哈希从入门到精通

一、基本概念 字符串哈希是将任意长度的字符串映射为固定长度的哈希值&#xff08;通常为整数&#xff09;的技术&#xff0c;核心目标是实现O(1)时间的子串快速比较和高效查询。其本质是通过数学运算将字符串转换为唯一性较高的数值&#xff0c;例如&#xff1a; ​​​​​​…...

C语言:编程设计猜数游戏

先由计算机想一个数给用户猜&#xff0c;如果猜对了&#xff0c;提示“right&#xff01;”&#xff0c;猜错了&#xff0c;提示“wrong&#xff01;及大小” 思路&#xff1a;用随机函数rand&#xff08;&#xff09;取到计算机想的数 代码&#xff1a; #include <stdio.…...

地下车库智能停车位指引系统方案(还有缺陷)

一、系统核心技术架构 通过车牌识别+车位检测+室内定位+路径规划四大技术模块实现全自动指引: 二、关键技术方案 1. 车辆身份识别与入场触发 车牌识别(LPR)技术 入口处部署高清摄像头,自动识别车牌并关联车辆信息(如会员、临时车)。触发逻辑:识别成功后抬杆放行,同时…...

Docker 使用指南

Docker 是一种开源的容器化平台&#xff0c;它通过使用容器来进行应用程序的打包、分发和部署。下面是 Docker 的基本概念和优势&#xff1a; 容器化&#xff1a;Docker 使用容器来封装应用程序及其所有依赖项&#xff0c;使其能够在任何环境中运行&#xff0c;并且与底层系统隔…...

win10 c++ VsCode 配置PCL open3d并显示

win10 c VsCode配置PCL open3d并显示 一、效果图二、配置步骤2.1 安装vscode2.2 pcl-open3d配置2.3 vscode中设置 三、测试代码四、注意事项及后续 一、效果图 二、配置步骤 2.1 安装vscode vscode下载链接 下载中文插件、c相关插件 2.2 pcl-open3d配置 1&#xff09;下载…...

Vala 开发环境搭建

介绍 Vala 是一种使用现代高级抽象的编程语言&#xff0c;与用 C 语言编写的应用程序和库相比&#xff0c;没有施加额外的运行时要求&#xff0c;也不需要使用不同的 ABI。 Vala 使用 GObject 类型系统&#xff0c;并具有额外的代码生成例程&#xff0c;使面向 GNOME 堆栈变得简…...

【网页】自制流光卡片

概述 小红书有个博主自己搞的笔记排版工具叫“流光卡片”&#xff0c;类似的还有个Markdown排版工具叫MD2Card。 我这个版本类似&#xff0c;但是自己写的东西&#xff0c;控制性更好。 初期就写了个静态页面&#xff0c;后期结合Godot快速生成&#xff0c;并可能结合JS库&a…...

【数据结构】栈与队列:基础 + 竞赛高频算法实操(含代码实现)

什么是栈&#xff1f;什么是队列&#xff1f; 什么是先进后出&#xff1f;什么是先进先出&#xff1f; 了解基础之后&#xff0c;又如何用来写算法题&#xff1f; 带着这些疑问&#xff0c;让我带领你&#xff0c;走进栈与队列的世界 栈与队列 栈&#xff1a; 1、栈的基本…...

CSP-J/S冲奖第18天:真题解析

解题步骤 读取输入&#xff1a;首先读取整数n&#xff0c;然后读取n个正整数并存储在一个数组或容器中。 排序数组&#xff1a;对数组进行排序&#xff0c;以便后续使用双指针法高效查找。 遍历数组&#xff1a;对于每个数target&#xff0c;检查是否存在另外两个不同的数a和…...

【linux】虚拟机执行sudo yum isntall perl报错 could not retrieve mirrorlist htt:

项目场景&#xff1a; 提示&#xff1a;虚拟机安装拓展包&#xff0c;sudo yum install perl Virtualbox 在不安装增强功能扩展的情况下, 无法自适应分辨率和共享剪切板等操作 问题描述 原因分析&#xff1a; 提示&#xff1a;这里填写问题的分析&#xff1a; 出现这个错误是因…...

旅游类小程序界面设计

产品概述 艾啦游是一款互联网旅游类小程序&#xff0c;致力于国内精品旅游&#xff0c;以及拥有自由行、专属热榜单、出行攻略等诸多功能&#xff0c;汇聚了许多国内的人气景点&#xff0c;与诸多城市的酒店也保持合作&#xff0c;打造一体式旅行服务&#xff0c;更有不断上新…...

DQN 玩 2048 实战|第三期!优化网络,使用GPU、Env奖励优化

视频讲解&#xff1a; DQN 玩 2048 实战&#xff5c;第三期&#xff01;优化网络&#xff0c;使用GPU、Env奖励优化 1. 仅考虑局部合并奖励&#xff1a;目前的奖励只设置为合并方块时获得的分数&#xff0c;只关注了每一步的即时合并收益&#xff0c;而没有对最终达成 2048 这个…...

【python】http post 在body中传递json数据 以发送

http post 在body中传递json数据 以发送&#xff0c;json的格式非常重要这里要传递json对象&#xff0c;而不是一个json字符串 传递post一个 JSON 字符串 是ok的 是的&#xff0c; {"rsource_rhythm_action_list": {"name": "AI_\\u6708\\u4eae\\u…...

Linux错误(2)程序触发SIGBUS信号分析

Linux错误(2)之SIGBUS错误分析 Author: Once Day Date: 2025年3月12日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: Linux实践记录_Once_day的博…...

【Halcon】灰度不均解决方案

目录 1、平场校正 2、形态学背景估计 3、频域滤波抑制低频光照不均 4、动态局部自适应 1、平场校正 原理:通过白场(White Image)和黑场(Black Image)图像,手动计算校正系数 * 读取图像 read_image(ImageRaw, raw_image) // 原始图像 read_image(ImageWhite, …...

滑动窗口算法详解:从入门到精通

目录 引言 1. 滑动窗口算法简介 2. 滑动窗口的基本思想 3. 滑动窗口的应用场景 3.1 最大子数组和 3.2 最小覆盖子串 3.3 最长无重复字符子串 4. 滑动窗口的实现步骤 5. 滑动窗口的代码示例 6. 滑动窗口的优化技巧 6.1 使用哈希表记录字符频率 6.2 使用双指针维护窗口…...

JAVA数据库技术(一)

JDBC 简介 JDBC&#xff08;Java Database Connectivity&#xff09;是Java平台提供的一套用于执行SQL语句的Java API。它允许Java程序连接到数据库&#xff0c;并通过发送SQL语句来查询、更新和管理数据库中的数据。JDBC为不同的数据库提供了一种统一的访问方式&#xff0c;使…...

LightGBM + TA-Lib A股实战进阶:Optuna调优与Plotly可视化详解

LightGBM TA-Lib A 股实战进阶&#xff1a;Optuna 调优与 Plotly 可视化详解 本文系统讲解了 LightGBM 在 A 股市场的应用&#xff0c;涵盖模型构建、Optuna 参数调优及 Plotly 可视化。通过实战案例&#xff0c;帮助读者全面掌握相关技术&#xff0c;提升在金融数据分析与预测…...

第二:go 链接mysql 数据库

mac  mysql 安装 的步骤 mysql  安装 配制&#xff1a; https://juejin.cn/post/7454870544929472550 mac brew 如何安装mysql数据库 要在Mac上使用Homebrew安装MySQL数据库&#xff0c;请按照以下步骤操作&#xff1a;步骤 1: 安装Homebrew 如果你还没有安装Homebrew&a…...

QListView、QListWidget、QTableView和QTableWidget

一、概念 在Qt框架中&#xff0c;QListView、QListWidget、QTableView和QTableWidget都是用于显示列表或表格数据的控件。 QListView是一个基于模型-视图架构的控件&#xff0c;用于展示列表形式的数据。它本身并不存储数据&#xff0c;而是依赖于一个QAbstractListModel或其子…...

[贪心算法]-最大数(lambda 表达式的补充)

1.解析 我们一般使用的排序比较大小都是 a>b 那么a在b的前面 ab 无所谓 a<b a在b的后面 本题的排序则是 ab>ba 那么a在b的前面 abba 无所谓 ab<ba a在b的后面 2.代码 class Solution { public:string largestNumber(vector<int>& nums) {//1.先把所有…...

C语言 —— 此去经年梦浪荡魂音 - 深入理解指针(卷二)

目录 1. 数组名与地址 2. 指针访问数组 3.一维数组传参本质 4.二级指针 5. 指针数组 6. 指针数组模拟二维数组 1. 数组名与地址 我们先看下面这个代码&#xff1a; int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p &arr[0]; 这里我们使用 &arr[0] 的方式拿到了数…...

python实现简单的图片去水印工具

python实现简单的图片去水印工具 使用说明&#xff1a; 点击"打开图片"选择需要处理的图片 在图片上拖拽鼠标选择水印区域&#xff08;红色矩形框&#xff09; 点击"去除水印"执行处理 点击"保存结果"保存处理后的图片 运行效果 先简要说明…...

使用dify+deepseek部署本地知识库

使用difydeepseek部署本地知识库 一、概述二、安装windows docker desktop1、确认系统的Hyper-v功能正常启用2、docker官网下载安装windows客户端3、安装完成后的界面如下所示 三、下载安装ollama四、部署本地deepseek五、本地下载部署dify5.1 下载dify的安装包5.2 将dify解压到…...

(C语言)指针与指针数组的使用教学(C语言基础教学)(指针教学)

指针是什么&#xff1f;指针怎么用&#xff1f;指针数组又是什么&#xff1f;&#xff1f;&#xff1f; 想必大家刚学C语言的时候对指针可谓是十分头疼了&#xff0c;听也听不懂&#xff0c;用也不会用 下面我来用我的理解来教你指针怎么用&#xff0c;还你一个脑子 1.指针的…...

【算法day13】最长公共前缀

最长公共前缀 https://leetcode.cn/problems/longest-common-prefix/submissions/612055945/ 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 class Solution { public:string longestCommonPrefix(vector<string&g…...

Effective C++ 剖析(条款1~9)

目录 条款01 视C为一个语言联邦(C由几部分组成) 条款02 尽量以 const,enum,inline 替换 #define 条款03 尽量使用 const 条款04 确定对象再使用前已经被初始化 条款05 了解c默默编写并调用那些函数 条款06 若不想使用编译器自动生成的函数就该明确拒绝 条款07 为多态基类…...

【Maven-plugin】有多少官方插件?

之前疏理了容器底层原理&#xff0c;现在回归主题,在阅读 next-public时发现 parent 将从多基础插件集成到 parent 仓库中单独维护&#xff0c;数量众多&#xff0c;故在此将所有插件分类整理。以达观其全貌&#xff0c;心中有数。 以下是 Apache Maven 官方维护的核心插件列表…...