【JavaScript】LeetCode:51-55

文章目录

  • 51 验证二叉搜索树
  • 52 二叉搜索树中第k小的元素
  • 53 二叉树的右视图
  • 54 二叉树展开为链表
  • 55 从前序与中序遍历序列构造二叉树

51 验证二叉搜索树

在这里插入图片描述

  • 递归
  • 对二叉搜索树进行中序遍历,输出节点的值是单调递增的。
  • 方法1:对二叉树进行中序遍历,将节点的值放入数组中,判断数组是否单调递增(双指针)。
  • 方法2:maxval记录前一个节点的数值,初始化为一个绩效的值。
  • 方法3:新建节点pre,pre指向前一个结点,初始化为null。这里给出方法3的代码。
/*** 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) {let pre = new TreeNode();pre = null;var isValid = function(root) {if(root == null){ // 空树也是二叉搜索树return true;}let left = isValid(root.left);if(pre != null && pre.val >= root.val){return false;}pre = root;let right = isValid(root.right);return left && right;}return isValid(root);
};

52 二叉搜索树中第k小的元素

在这里插入图片描述

  • 递归
  • 求中序遍历的第k个节点。
  • 对二叉搜索树进行中序遍历,遍历到第k个节点时,记录结果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* @param {number} k* @return {number}*/
var kthSmallest = function(root, k) {var traversal = function(root){if(root == null){return;}traversal(root.left);if(k == 0){return;}if(--k == 0){res = root.val;}traversal(root.right);}let res = 0;traversal(root);return res;
};

53 二叉树的右视图

在这里插入图片描述

  • 递归
  • 先递归右子树,再递归左子树。
  • 每层设置一个深度deep,遍历过程中,若该节点对应层的deep首次访问,则将该节点存入右视图结果数组中。
/*** 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 rightSideView = function(root) {var traversal = function(root, deep){if(root == null){return;}if(deep == res.length){res.push(root.val);}traversal(root.right, deep + 1);traversal(root.left, deep + 1);}let deep = 0;let res = [];traversal(root, deep);return res;
};

54 二叉树展开为链表

在这里插入图片描述

  • 递归
  • 使用"倒"中序遍历,即右 -> 左 -> 中,遍历结果(654321)中的第一个节点就是链表的最后一个节点(6)。
  • 新建pre作为前一个结点,初始化为null,随着"倒"中序遍历不断为其赋值为前一个结点。
  • 除了最后一个节点的左节点不为null外,其他节点的左节点都为null,右节点都为pre。
/*** 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 {void} Do not return anything, modify root in-place instead.*/
var flatten = function(root) {var traversal = function(root){if(root == null){return;}traversal(root.right);traversal(root.left);if(pre != null){root.right = pre;root.left = null;}pre = root;}let pre = new TreeNode();pre = null;traversal(root);return root;
};

55 从前序与中序遍历序列构造二叉树

在这里插入图片描述

  • 递归
  • 前序数组的第一个元素为节点元素,在中序数组中寻找该元素作为分割点index,分割出左中序数组和右中序数组。
  • index可以理解为,在中序数组中,索引为index的位置前有index个元素,而左前序数组和左中序数组的length应该相等(右同理),因此可以借助index分割前序数组。
  • 根据index分割前序数组,得到左前序数组和右前序数组。
  • 叶子节点直接返回该节点,不必将左、右节点设置为null。
  • 将左前序数组和右中序遍历继续遍历,右前序数组和右中序数组继续遍历。
/*** 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[]} preorder* @param {number[]} inorder* @return {TreeNode}*/
var buildTree = function(preorder, inorder) {var traversal = function(preorder, inorder){if(preorder.length == 0){return null;}let nodevalue = preorder[0];let node = new TreeNode(nodevalue);if(preorder.length == 1){ // 叶子节点直接返回return node;}let index = inorder.findIndex(item => item == node.val);let inleft = inorder.slice(0, index);let inright = inorder.slice(index + 1, inorder.length);let preleft = preorder.slice(1, 1 + index);let preright = preorder.slice(1 + index, preorder.length);node.left = buildTree(preleft, inleft);node.right = buildTree(preright, inright);return node;        }return traversal(preorder, inorder);
};

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

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

相关文章

若依_配置三级菜单或多级菜单

若依直接在router文件里配置的,没有在若依的菜单管理里配 然后也出现了上面链接里的那个中出现头部、左侧菜单和面包屑的情况 完整代码 {path: /zichan,meta: { title: 零星资产处置审批, icon: dashboard, affix: true, noCache: true },component: Layout,// red…

WebRtc实际应用

1、什么是WebRtc 1.1 概述 随着网络技术的快速发展,实时通讯变得越来越重要。WebRtc(web Real-Time Communication)技术应运而生。WebRtc是一个支持在浏览器进行实时语音,视频通信和数据传输的开放项目,它可以在不需要安装任何插件或者第三方…

MySQL:进阶巩固-存储过程

目录 一、存储过程的概述二、存储过程的基本使用2.1 创建存储过程2.2 使用存储过程2.3 查询指定数据库的存储过程以及状态信息2.4 查看某个存储过程的定义2.5 删除存储过程2.6 案例 三、存储过程的变量设置3.1 系统变量3.2 用户自定义变量3.3 局部变量 四、IF判断五、参数六、C…

【BetterBench博士】2024年中国研究生数学建模竞赛 E题:高速公路应急车道紧急启用模型 问题分析、数学模型及Python代码

2024年中国研究生数学建模竞赛 E题:高速公路应急车道紧急启用模型 问题分析 更新进展 【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析 【BetterBench博士】2024年中国研究生数学建模竞赛 E题:高速公路应急车道紧急启用…

物联网实践教程:微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——汇总

物联网实践教程:微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——汇总 前言 之前在学校获得了一个新玩意:ESP-01sWIFI模块,去搜了一下这个小东西很有玩点,远程控制LED啥的,然后我就想…

多校园信息付费发布顶置自定义表单小程序开源版开发

多校园信息付费发布顶置自定义表单小程序开源版开发 为校园管理和互动提供了强大的支持,包括用户端和运营后台两大部分。用户端允许学生和教职工方便地访问各种功能模块,而运营后台则使管理员能够高效地管理和配置系统。产品支持自定义模块和表单&#…

CUDA编程三、C++和cuda实现矩阵乘法SGEMM

目录 一、矩阵SGEMM 二、SGEMM的各种实现 1、cpu版本的实现 2、GPU并行计算最初始的版本 GPU中数据的移动 3、矩阵分块Shared Memory优化 4、LDS.128 float4* 优化 5、__syncthreads()位置优化 6、blank conflict优化 bank概念 bank conflict bank conflict危害和处…

c++ 继承 和 组合

目录 一. 继承 1.1 继承的概念 1.2 继承定义 1.3 继承类模板 1.4. 继承中的作用域 二. 派生类(子类)的默认成员函数 2.1 概念: 2.2 实现⼀个不能被继承的类 2.3 继承与友元 2.4继承与静态成员 三.多继承及其菱形继承问题 3.1继承方…

yolov10算法原理

文章目录 1. 模型效果2. 模型特点2.1 无NMS训练的一致性双重分配策略 (Consistent Dual Assignments for NMS-free Training)双重标签分配 (Dual Label Assignments)一致匹配度量(Consistent Match. Metric)一对一分配在一对多结果中的频率 2.2. 效率-准…

电场(electric-field)

图中: Q 产生电场的正电荷(可正可负,这里用正举例)q 试验电荷,正电荷(习惯上用正电荷)p 试验电荷所在的位置(即要测的电场强度的位置)r 为电荷间的距离 r ^ \widehat{r}…

[js逆向学习] fastmoss电商网站——店铺排名

逆向目标 网站:https://www.fastmoss.com/shop-marketing/tiktok接口:https://www.fastmoss.com/api/shop/shopList/参数:fm-sign 逆向分析 我们今天要分析的是店铺排名,先分析网络请求,找到目标接口 按照上图操作…

怎样批量对比两个数据库的表差异??

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

38.重复的子字符串

方法1: class Solution {public boolean repeatedSubstringPattern(String s) {if (s.equals("")) return false;String s2(ss).substring(1,(ss).length()-1);//去掉首尾字符return s2.contains(s);//判断是否包含s} } class Solution(object):def rep…

spring boot项目对接人大金仓

先确认一下依赖 第一 是否引入了mybatis-plus多数据源&#xff0c;如果引入了请将版本保持在3.5.0以上 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>${dynam…

接触器和复合开关的具体应用区别

接触器和复合开关在电力系统中都有各自的应用&#xff0c;但它们的功能和用途有所不同&#xff1a; 一、接触器 1、应用&#xff1a; 电动机控制&#xff1a;接触器常用于控制电动机的启停&#xff0c;能够承载电动机的启动电流。 自动控制系统&#xff1a;在自动化控制系统…

2-102基于matlab的蒙特卡洛仿真

基于matlab的蒙特卡洛仿真&#xff0c;对64QAM和BPSK进行蒙特卡洛仿真&#xff0c;并绘出误码率曲线。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a; 2-102基于matlab的蒙特卡洛仿真

【FPGA必知必会】(二)7系列的配置(一)

配置概述 7系列FPGA是通过将bitstream下载到内存中来实现配置的。 既可以通过外部非易失性存储器加载&#xff0c;也可以通过微处理器、DSP处理器、微控制器、PC或者板级测试仪进行加载。 有两种通用的配置路径&#xff0c;一种是串行数据路径&#xff0c;用于减少对器件引脚…

数据丢失不再怕!四款神器助你找回一切

哈喽&#xff0c;大家好&#xff01;今天咱们来聊聊数据恢复工具&#xff1b;在数字化的时代&#xff0c;数据丢失可是个让人头疼的问题&#xff1b;不过别担心&#xff0c;有了这些数据恢复工具&#xff0c;再也不用担心数据不见&#xff1b;下面我给大家推荐五款非常好用的数…

【systemctl start jenkins】启动报错问题解决

问题说明&#xff0c;最终是在jenkins.service中配置JAVA_HOME解决的&#xff0c;但是我的服务器环境中确定已经配置好了Java环境变量&#xff0c;并且java -version也能正常打印信息&#xff0c;不清楚为什么jenkins.service无法读取配置 1.环境配置说明 服务器&#xff1a;…

如何确定SAP 某些凭证或者单号的号码编码范围的 OBJECT 是什么?

在SAP的运维或者项目实施中&#xff0c;有时会如何确定SAP 某些凭证或者单号的号码 OBJECT 是什么&#xff1f; 一般一下常用的可以通过事务代码 例如&#xff1a; XDN1 Create Number Ranges for Customer Accounts&#xff0c;定义客户编码FBN1查看维护会计凭证号范围 我…