leetcode二叉搜索树部分笔记

news/2024/12/19 14:36:48/

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

二叉搜索树

  • 1. 二叉搜索树的最小绝对差
  • 2. 二叉搜索树中第 K 小的元素
  • 3. 验证二叉搜索树


1. 二叉搜索树的最小绝对差

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。

差值是一个正数,其数值等于两值之差的绝对值。

在这里插入图片描述
解题思路: 二叉搜索树,大小是 左 根 右。
首先确定边界条件: 当root == null时,直接返回。
其次每次递归逻辑:需要从小到大开始,首先去找二叉搜索树的最小值,也就是最左边的节点,找到后,判断pre是否为-1,如果是-1,则仅记录当前节点的值即可。如果不是-1,则说明当前节点比pre大,需要计算两者差值,然后pre更新为当前节点。
最后再去递归右子树节点。

class Solution {int pre;int ans;public int getMinimumDifference(TreeNode root) {ans = Integer.MAX_VALUE;pre = -1;dfs(root);return ans;}public void dfs(TreeNode root) {if (root == null) {return;}dfs(root.left);if (pre == -1) {pre = root.val;} else {ans = Math.min(ans, root.val - pre);pre = root.val;}dfs(root.right);}
}

2. 二叉搜索树中第 K 小的元素

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。

在这里插入图片描述
解题思路: 中序遍历,然后存入list集合中,然后用list.get(k-1)即可。

class Solution {List<Integer> list = new ArrayList<>();public int kthSmallest(TreeNode root, int k) {dfs(root);return list.get(k-1);}public void dfs(TreeNode root){if(root == null){return;}dfs(root.left);list.add(root.val);dfs(root.right);}
}

3. 验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

节点的左
子树
只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
在这里插入图片描述
解题思路: 中序遍历,判断左子树、根节点、右子树的值是否能遵循二叉搜索树,如果不遵循则让statue等于1,然后返回fasle。

class Solution {Long pre;int state;public boolean isValidBST(TreeNode root) {pre = Long.MIN_VALUE;state = 0;dfs(root);if(state == 1){return false;}return true;}public void dfs(TreeNode root){if(root == null){return;}dfs(root.left);if(pre == Long.MIN_VALUE){pre = (long)root.val;}else{if(pre >= root.val){state = 1;}pre = (long)root.val;}dfs(root.right);}
}

http://www.ppmy.cn/news/1556405.html

相关文章

[bug] StarRocks borker load意向之外的bug

意向之外&#xff0c;又清理之中 背景&#xff1a; StarRocks各方面碾压相同类型的数据库&#xff0c;最近我们要从生成HIVE导历史数据&#xff08;ORC格式&#xff09;到StarRocks&#xff0c;前期小测一下&#xff0c;在测试是没问题&#xff0c;上生产先导2个月的数据&…

Node.js第三方模块

【图书介绍】《Node.jsMongoDBVue.js全栈开发实战》-CSDN博客 《Node.jsMongoDBVue.js全栈开发实战&#xff08;Web前端技术丛书&#xff09;》(邹琼俊)【摘要 书评 试读】- 京东图书 (jd.com) 2.3.1 什么是第三方模块 别人写好的、具有特定功能的、我们能直接使用的模块即为…

使用html2canvas库对可滚动的dom节点导出全量的图片

页面的dom节点样式 想要导出的图片样式 做法 1&#xff0c;使用html2canvas库 先在项目中安装&#xff1a;npm install html2canvas在vue文件中引用&#xff1a; import html2canvas from "html2canvas";2&#xff0c; 对于dom节点&#xff0c;不能有overflow&…

centos上配置yum源

1. 进入yum源repo的目录 cd /etc/yum.repos.d/然后可以通过ls查看下面所有的后缀为.repo的文件 2. 新建一个备份目录&#xff0c;将原有的.repo文件放到其中 mkdir yum.repos.d.backup mv *.repo yum.repos.d.backup/3. 获取阿里提供的repo配置文件 这里使用到了wget命令&a…

基于PHP的民宿预订管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的民宿预订管理系统 一 介绍 此民宿预订管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。(附带配套设计文档) 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册…

游戏引擎学习第44天

仓库: https://gitee.com/mrxiao_com/2d_game 向量数学的重要性 矢量数学非常重要&#xff0c;因为 它在某种程度上类似于将C和C视为高于汇编语言的语言&#xff0c;从而使得我们能够以略高的层次思考问题&#xff0c;同时保留大部分性能好处和直接访问的类型。这种思维方式就…

外观模式的理解和实践

外观模式&#xff08;Facade Pattern&#xff09;是一种常用的软件设计模式&#xff0c;它提供了一个统一的接口&#xff0c;用来访问子系统中的一群接口。该模式定义了一个高层的接口&#xff0c;使得子系统更容易使用。简单来说&#xff0c;外观模式就是通过引入一个外观角色…

any/all 子查询优化规则的原理与解析 | OceanBase查询优化

背景 在通常情况下&#xff0c;当遇到包含any/all子查询的语句时&#xff0c;往往需要遵循嵌套执行的方式&#xff0c;因此其查询效率较低。Oceanbase中制定了相应的any/all子查询优化规则&#xff0c;能够能够识别并优化符合条件的any/all子查询&#xff0c;从而有效提升查询…