LeetCode热题100JS(44/100)第八天|二叉树的直径|二叉树的层序遍历|将有序数组转换为二叉搜索树|验证二叉树搜索树|二叉搜索树中第K小的元素
543. 二叉树的直径
题目链接:543. 二叉树的直径
难度:简单
刷题状态:1刷
新知识:
解题过程
思考
示例 1:

输入:root = [1,2,3,4,5] 输出:3 解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。
没什么思路,直接看答案
题解分析
参考题解链接:【视频】彻底掌握直径 DP!从二叉树到一般树!(Python/Java/C++/C/Go/JS/Rust)
详细分析如下
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {number}*/
var diameterOfBinaryTree = function(root) {let res=0function dfs(node){//统计的是路径长度,不是节点个数if(!node) return -1let llen=dfs(node.left)+1//左子树最大链长+1let rlen=dfs(node.right)+1//右子树最大链长+1res=Math.max(res,llen+rlen)//两条链拼成路径return Math.max(llen,rlen)//当前子数最大链长}dfs(root)return res
};
手搓答案(无非废话版)
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {number}*/
var diameterOfBinaryTree = function(root) {let res=0function dfs(root){if(!root) return -1let llen=dfs(root.left)+1let rlen=dfs(root.right)+1res=Math.max(res,llen+rlen)return Math.max(llen,rlen)}dfs(root)return res
};
总结
注意这里返回的是//当前子数最大链长return Math.max(llen,rlen)
102. 二叉树的层序遍历
题目链接:102. 二叉树的层序遍历
难度:中等
刷题状态:2刷
新知识:
- `[...map.values()]` // 返回按深度排序的节点值数组
解题过程
思考
示例 1:

输入:root = [1,2,3,4,5] 输出:3 解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。
放下1刷的过程在题解,虽然写过但不记得咋写的了,直接看答案吧
题解分析
参考题解链接:二叉树的层序遍历
详细分析如下
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {number[][]}*/
var levelOrder = function(root) {let map=new Map()function dfs(node,depth){if(!node) return depthlet leftDepth=dfs(node.left,depth+1)let rightDepth=dfs(node.right,depth+1)// console.log(node.val,leftDepth)if(!map.has(leftDepth)){map.set(leftDepth,[])}map.get(leftDepth).push(node.val)return depth}dfs(root,-1)let res=Array.from(map.entries()).sort((a,b)=>a[0]-b[0]).map(([i,val])=>val)return res
};
手搓答案(无非废话版)
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {number[][]}*/
var levelOrder = function(root) {let map=new Map()function dfs(node,depth){if(!node) return depthif(!map.has(depth)) map.set(depth,[])map.get(depth).push(node.val)dfs(node.left,depth+1)dfs(node.right,depth+1)return depth}dfs(root,0)return [...map.values()]
};
总结
题解是逆向填入的的,我觉得手撕的正向填入好理解一点
108. 将有序数组转换为二叉搜索树
题目链接:
108. 将有序数组转换为二叉搜索树
难度:简单
刷题状态:1刷
新知识:
解题过程
思考
示例 1:

输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

平衡二叉树 是指该树所有节点的左右子树的高度相差不超过 1。
不会,直接看答案
题解分析
参考题解链接:二叉树的层序遍历
详细分析如下
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*/
/*** @param {number[]} nums* @return {TreeNode}*/
var sortedArrayToBST = function(nums) {function dfs(lower,higher){if(lower>higher) return null//找中间的let mid=lower+Math.floor((higher-lower)/2)let root=new TreeNode(nums[mid])//连接左子树root.left=dfs(lower,mid-1)//连接右子树root.right=dfs(mid+1,higher)return root}return dfs(0,nums.length-1)
};
手搓答案(无非废话版)
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*/
/*** @param {number[]} nums* @return {TreeNode}*/
var sortedArrayToBST = function(nums) {function dfs(lower,higher){if(lower>higher) return nulllet mid=lower+Math.floor((higher-lower)/2)let root=new TreeNode(nums[mid])root.left=dfs(lower,mid-1)root.right=dfs(mid+1,higher)return root}return dfs(0,nums.length-1)
};
总结
递归解法,感觉二叉树的都是套路,就是得多练,找到套路
98. 验证二叉搜索树
题目链接:98. 验证二叉搜索树
难度:中等
刷题状态:2刷
新知识:
解题过程
思考
示例 1:

输入:root = [2,1,3] 输出:true
注意是左子树,右子树,不行,实在是忘了,直接看答案吧,这么基础的题!!!!
放下1刷过程在题解
题解分析
参考题解链接:【视频】前序中序后序,三种方法,一个视频讲透!(Python/Java/C++/Go/JS)
详细分析如下
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {boolean}*/
// var isValidBST = function(root,left=-Infinity,right=Infinity) {
// if(!root){
// return true
// }
// let l=isValidBST(root.left,left,root.val)
// let r=isValidBST(root.right,root.val,right)
// return left<root.val&&root.val<right&&l&&r
// };// var isValidBST = function(root) {
// let pre=-Infinity
// function dfs(node){
// if(!node){
// return true
// }
// console.log('node',node.val)
// if(!dfs(node.left)||node.val<=pre){
// return false
// }
// pre=node.val
// return dfs(node.right)
// }
// return dfs(root)
// };var isValidBST =function(root){function dfs(node){if(!node) return [Infinity,-Infinity]console.log(node.val)let [lMin,lMax]=dfs(node.left)let [rMin,rMax]=dfs(node.right)let x=node.valif(x<lMax||x>rMin) return [-Infinity,Infinity]return [Math.min(lMin,x),Math.max(rMax,x)]}let a=dfs(root)[1]return a!=Infinity
}
手搓答案(无非废话版)
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {boolean}*/
var isValidBST =function(root){// //前序遍历// function dfs(node,left=-Infinity,right=Infinity){// if(!node) return true// let l=dfs(node.left,left,node.val)// let r=dfs(node.right,node.val,right)// return left<node.val&&node.val<right&&l&&r// }// return dfs(root)//中序遍历//(中序遍历应该是严格递增的)//这个变量用于记录中序遍历过程中上一个访问的节点的值,以便检查当前节点值是否大于上一个节点值,// let pre=-Infinity// function dfs(node){// if(!node) return true// if(!dfs(node.left)||node.val<=pre) return false// pre=node.val// return dfs(node.right)// }// return dfs(root)//后序遍历function dfs(node){//确保下一次的比较if(!node) return [Infinity,-Infinity]let [lMin,lMax]=dfs(node.left)let [rMin,rMax]=dfs(node.right)let x=node.val//说明已经不是二叉树了if(x<=lMax||x>=rMin) return [-Infinity, Infinity]return [Math.min(lMin,x),Math.max(x,rMax)]}return dfs(root)[1]==Infinity?false:true
}
总结
经典题目!!!三种方法都要记得!我觉得中序的最好理解
230. 二叉搜索树中第 K 小的元素
题目链接:230. 二叉搜索树中第 K 小的元素
难度:中等
刷题状态:2刷
新知识:
解题过程
思考
示例 1:

输入:root = [3,1,4,null,2], k = 1 输出:1
放下1刷过程在题解
题解分析
参考题解链接:二叉搜索树中第K小的元素
详细分析如下
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @param {number} k* @return {number}*/
var kthSmallest = function(root, k) {let a=[]function dfs(node){if(!node) return dfs(node.left)if(a.length<k){a.push(node.val)}dfs(node.right)}dfs(root)return a[a.length-1]
};
手搓答案(无非废话版)
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @param {number} k* @return {number}*/
var kthSmallest = function(root, k) {let nums=[]function dfs(node){if(!node) return dfs(node.left)if(nums.length<k) nums.push(node.val)dfs(node.right)}dfs(root)return nums[k-1]
};
总结
还可以优化~多设置一个变量,大家想想吧~
相关文章:
LeetCode热题100JS(44/100)第八天|二叉树的直径|二叉树的层序遍历|将有序数组转换为二叉搜索树|验证二叉树搜索树|二叉搜索树中第K小的元素
543. 二叉树的直径 题目链接:543. 二叉树的直径 难度:简单 刷题状态:1刷 新知识: 解题过程 思考 示例 1: 输入:root [1,2,3,4,5] 输出:3 解释:3 ,取路径 [4,2,1,3] 或…...
【虚拟化】Hyper-V 与 WSL 2
关于 Hyper-V 与 WSL 2 的简介 Hyper-V 是微软出的 Type-I 型 Hypervisor,根据微软官方说 WSL 2 用了 Hyper-V 架构的子集,称为虚拟机平台(Virtual Machine Platform),是 Windows 中的一个可选组件,所以你…...
力扣刷题DAY6(滑动窗口/中等+栈/简单、中等)
一、滑动窗口 找到字符串中所有字母异位词 方法一:哈希表 class Solution { public:vector<int> findAnagrams(string s, string p) {vector<int> ans;unordered_map<char, int> target;for (int i 0; i < p.size(); i) {target[p[i]];}in…...
MySQL中的共享锁和排他锁
MySQL 中的锁可以从多个维度进行分类,其中从模式上可以分为共享锁(Shared Lock,S Lock)和 排他锁(Exclusive Lock,X Lock)。 共享锁(Shared Lock,S Lock) 共…...
HarmonyOS ArkTS声明式UI开发实战教程
引言:为何选择ArkTS? 在HarmonyOS生态快速发展的当下,ArkTS作为新一代声明式UI开发框架,正在引发移动应用开发范式的变革。笔者曾在多个跨平台框架开发中经历过"命令式编程之痛",直到接触ArkTS后才发现&…...
【AI】【Unity】关于Unity接入DeepseekAPI遇到的坑
前言 由于deepseek网页端在白天日常抽风,无法正常的使用,所以调用API就成了目前最好的选择,尤其是Deepseek的API价格低得可怕,这不是和白送的一样吗!然后使用过很多本地部署接入API的方式,例如Chatbox、Pa…...
虚拟机 | Ubuntu图形化系统: open-vm-tools安装失败以及实现文件拖放
系列文章目录 虚拟机 | Ubuntu 安装流程以及界面太小问题解决 文章目录 系列文章目录虚拟机 | Ubuntu 安装流程以及界面太小问题解决 前言一、VMware Tools 和 open-vm-tools 是什么1、VMware Tools2、open-vm-tools 二、推荐使用open-vm-tools(简单)1、…...
zabbix 监控的内存溢出问题 out of memory
zabbix 由于是docker 建置 zabbix-server-server 在web端出现异常情况 经过检查发现docker status 显示Restarting (0) 4 seconds ago 频繁在重起 经过docker logs 分析查看到 __zbx_shmem_malloc(): out of memory (requested 256 bytes) 问题 191:20250306:023902.993 m…...
【DeepSeek】Ubuntu快速部署DeepSeek(Ollama方式)
文章目录 人人都该学习的DeepSeekDeepSeek不同版本功能差异DeepSeek与硬件直接的关系DeepSeek系统兼容性部署方式选择部署步骤(Ollama方式)1.选定适合的deepseek版本2.环境准备3.安装Ollama4.部署deepseek5.测试使用 人人都该学习的DeepSeek DeepSeek 作…...
升级到Android Studio 2024.2.2 版本遇到的坑
一、上来就编译报错,大概率是因为选择了替换安装,本地配置文件出错 找到本地当前版本的配置文件,删掉,重启studio就好了: 1、打开终端 2、“cd /Users/用户名/Library/Application\ Support/Google” //到Google目录 …...
2025最新Transformer模型及深度学习前沿技术应用
第一章、注意力(Attention)机制 1、注意力机制的背景和动机(为什么需要注意力机制?注意力机制的起源和发展里程碑)。 2、注意力机制的基本原理(什么是注意力机制?注意力机制的数学表达与基本公…...
深入解析 Umi-OCR:高效的免费开源 OCR 文字识别工具
1. Umi-OCR 简介 1.1 什么是 Umi-OCR? Umi-OCR 是一款开源、免费、支持离线使用的光学字符识别(OCR)工具,基于 PaddleOCR 和 Tesseract-OCR,能够高效识别图片中的文字,尤其适用于批量截图文字提取、PDF 文…...
WebAssembly技术及应用了解
WebAssembly(Wasm)是一种为Web设计的高效、低级的二进制指令格式,旨在提升Web应用的性能并支持多种编程语言。以下是对其核心概念、优势、应用场景及开发流程的系统介绍: 1. 核心概念 二进制格式:Wasm采用紧凑的二进制…...
【ESP-ADF】在 VSCode 安装 ESP-ADF 注意事项
1.检查网络 如果您在中国大陆安装,请使用魔法上网,避免无法 clone ESP-ADF 仓库。 2.VSCode 安装 ESP-ADF 在 VSCode 左侧活动栏选择 ESP-IDF:explorer,展开 advanced 并点击 Install ESP-ADF 然后会出现选择 ESP-ADF 安装目录。 如果出现…...
我的两个医学数据分析技术思路
我的两个医学数据分析技术思路 从临床上获得的或者公共数据库数据这种属于观察性研究,是对临床诊疗过程中自然产生的数据进行分析而获得疾病发生发展的规律等研究成果。再细分,可以分为独立危险因素鉴定和预测模型构建两种。 独立危险因素鉴定是一直以…...
MySQL 架构、索引优化、DDL解析、死锁排查
私人博客传送门 MySQL 认识索引 | 魔筝炼药师 MySQL 索引优化 | 魔筝炼药师 OnlineDDL(在 MySQL 5.7 数据库里,InnoDB引擎,执行一条DDL会发生什么事情) | 魔筝炼药师 MySQL 死锁排查 | 魔筝炼药师...
Ubuntu搭建最简单WEB服务器
安装apache2 sudo apt install apache2 检查状态 $ sudo systemctl status apache2 ● apache2.service - The Apache HTTP ServerLoaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese>Active: active (running) since Thu 2025-03-06 09:51:10…...
VSCode 配置优化指南:打造极致高效的前端开发环境
VSCode 配置优化指南:打造极致高效的前端开发环境 一、基础环境配置:让开发更流畅 1. 性能优化设置 // settings.json {"files.autoSave": "afterDelay", // 自动保存(延迟1秒)"files.exclud…...
FPGA-DE2115开发板实现4位全加器、3-8译码器。
文章目录 一、安装quartus二、4位全加器三、3-8译码器(8段数码管)四、参考文章 一、安装quartus 安装quartus参考文章:Quartus Prime 18.0与ModelSim的安装 Quartus II 18.0安装教程(非常详细)从零基础入门到精通&…...
宇树科技嵌入式面试题及参考答案(春晚机器人的公司)
目录 设计一个带看门狗(Watchdog)的嵌入式系统,描述故障恢复流程 在资源受限的 MCU 上实现 OTA 升级功能,描述关键设计点 如何实现 OTA(空中升级)功能?描述固件校验和回滚机制的设计要点 推挽输出与开漏输出的区别?举例说明其在 GPIO 控制中的应用 UART、SPI、I2C …...
Spring提供的SPEL表达式
SPEL 1. 概述 SpEL是Spring框架中用于表达式语言的一种方式。它类似于其他编程语言中的表达式语言,用于在运行时计算值或执行特定任务。 SpEL提供了一种简单且强大的方式来访问和操作对象的属性、调用对象的方法,以及实现运算、条件判断等操作。它可以…...
Pytorch xpu环境配置 Pytorch使用Intel集成显卡
1、硬件集显要为Intel ARC并安装正确驱动 2、安装Intel oneAPI Base Toolkit (https://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/base-toolkit-download.html)安装后大约20G左右,注意安装路径 3、安装Visual Studio Build To…...
uploadlabs通关思路
目录 靶场准备 复现 pass-01 代码审计 执行逻辑 文件上传 方法一:直接修改或删除js脚本 方法二:修改文件后缀 pass-02 代码审计 文件上传 1. 思路 2. 实操 pass-03 代码审计 过程: 文件上传 pass-04 代码审计 文件上传 p…...
优选算法的智慧之光:滑动窗口专题(二)
专栏:算法的魔法世界 个人主页:手握风云 目录 一、例题讲解 1.1. 最大连续1的个数 III 1.2. 找到字符串中所有字母异位词 1.3. 串联所有单词的子串 1.4. 最小覆盖子串 一、例题讲解 1.1. 最大连续1的个数 III 题目要求是二进制数组&am…...
【蓝桥杯单片机】第十二届省赛
一、真题 二、模块构建 1.编写初始化函数(init.c) void Cls_Peripheral(void); 关闭led led对应的锁存器由Y4C控制关闭蜂鸣器和继电器 由Y5C控制 2.编写LED函数(led.c) void Led_Disp(unsigned char ucLed); 将ucLed取反的值赋给P0 开启锁存器…...
剑指 Offer II 047. 二叉树剪枝
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20047.%20%E4%BA%8C%E5%8F%89%E6%A0%91%E5%89%AA%E6%9E%9D/README.md 剑指 Offer II 047. 二叉树剪枝 题目描述 给定一个二叉树 根节点 root ,树的每…...
【自学笔记】OpenStack基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 OpenStack基础知识点总览一、OpenStack概述1.1 OpenStack起源1.2 OpenStack的目标与优势1.3 OpenStack的常见核心项目 二、OpenStack的节点类型2.1 控制节点2.2 网络…...
第5章:vuex
第5章:vuex 1 求和案例 纯vue版2 vuex工作原理图3 vuex案例3.1 搭建vuex环境错误写法正确写法 3.2 求和案例vuex版细节分析源代码 4 getters配置项4.1 细节4.2 源代码 5 mapState与mapGetters5.1 总结5.2 细节分析5.3 源代码 6 mapActions与mapMutations6.1 总结6.2…...
视觉在协作机器人上的场景应用
看了UR、ABB等协作机器人公司的一些视觉方面的应用,总结大概有下面几个方面。 1.工业制造领域 3C 产品生产 外观检测:可精确检测电子元件的划痕、污渍、凹陷等外观缺陷,如手机屏幕的微小划痕、芯片表面的瑕疵等,确保产品高质量&a…...
C#数据类型及相互转换
C#数据类型及相互转换 一、C#常用的基础数值类型二、C#常用的引用类型三、数据类型转换之拆箱装箱四、常量变量定义及使用规范五、C#运算符六、字符串拼接及格式化方法六、数值类型1. 自动转换2. 强制转换3. 字符串与数值类型的相互转换七、Nuget安装及西门子PLC通信1. Nuget安…...
