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

★【二叉搜索树(中序遍历特性)】【 ★递归+双指针】Leetcode 98. 验证二叉搜索树

★【二叉搜索树(中序遍历特性)】【 ★递归+双指针】Leetcode 98. 验证二叉搜索树

    • 二叉搜索树
  • 98. 验证二叉搜索树
    • 解法1 笨 中序递归遍历为一个数组 然后判断数组是不是升序排列就可以
    • ★解法2 不使用数组 递归法

---------------🎈🎈题目链接🎈🎈-------------------

二叉搜索树

二叉搜索树


98. 验证二叉搜索树

在这里插入图片描述


解法1 笨 中序递归遍历为一个数组 然后判断数组是不是升序排列就可以

二叉搜索树的特性:中序遍历是单调递增的

时间复杂度:
中序遍历二叉搜索树的时间复杂度为 O(n),其中 n 是二叉树中节点的数量。
检查列表是否按升序排列的时间复杂度为 O(n)。
因此,总的时间复杂度为 O(n)。

空间复杂度:
存储节点值的列表的空间复杂度为 O(n),因为需要存储整个树的节点值。
递归调用时的栈空间复杂度取决于树的高度,最坏情况下为 O(n),平均情况下为 O(log n),其中 n 是树中的节点数量。
因此,总的空间复杂度为 O(n)。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isValidBST(TreeNode root) {// 中序递归遍历为一个数组 然后判断数组是不是升序排列就可以List<Integer> mylist = new ArrayList<>();helper(root,mylist);for(int i = 0; i < mylist.size(); i++){if(i>0 && (long)mylist.get(i)-(long)mylist.get(i-1) <= 0){return false;}}return true;}public void helper(TreeNode root,List<Integer> mylist){if(root == null) return ;helper(root.left,mylist);mylist.add(root.val);helper(root.right,mylist);}
}

★解法2 不使用数组 递归法

另一个题也是这样 530. 二叉搜索树的最小绝对差


class Solution {TreeNode pre = null;  public boolean isValidBST(TreeNode root) {// 不用数组直接用二叉树结构进行判断if(root == null) return true;  // 终止条件// 中序遍历顺序 当前的和前一个进行比较boolean left = isValidBST(root.left); // 左if(pre!= null && root.val <= pre.val){ // 中return false;}pre = root;boolean right = isValidBST(root.right); //右if(left && right) return true;else return false;}
}
http://www.lryc.cn/news/310113.html

相关文章:

  • 打造无缝滚动体验:JavaScript中的scrollIntoView()方法实战指南
  • 实战:如何将Oracle单实例数据库转换成Oracle RAC数据库
  • 基于华为atlas的分类模型实战
  • 编程语言:SQL Server数据库使用教程,SQL Server增删改查语句
  • 【tableau学习笔记】tableau无法连接数据源
  • cetos7 Docker 安装 gitlab
  • 无极低码:无极低码部署版操作指南
  • C语言实现日本某地发生了一件谋杀案
  • 【C++】const成员
  • 利用小蜜蜂AI智能问答ChatGPT+AI高清绘图生成图文故事案例
  • Github项目推荐-LightMirrors
  • day14:栈排序
  • 【LeetCode:2368. 受限条件下可到达节点的数目 + BFS】
  • pyorbbecsdk奥比中光python版本SDK在Windows下环境配置笔记
  • YOLOV8介绍
  • 【ElfBoard】基于 Linux 的智能家居小项目
  • 自动化测试介绍、selenium用法(自动化测试框架+爬虫可用)
  • 深度学习的一个完整过程通常包括以下几个步骤
  • WPS如何共享文件和文件夹
  • PowerData 2024“数字经济-城市开源行”活动预告
  • QT多语言切换功能
  • windows上elasticsearch的ik分词器的安装
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的口罩识别系统(Python+PySide6界面+训练代码)
  • 在Windows系统中启动Redis服务
  • k8s.gcr.io/pause:3.2镜像丢失解决
  • 全面整理!机器学习常用的回归预测模型
  • 在vue中对keep-alive的理解,它是如何实现的,具体缓存的是什么?
  • 章节一、认识three.js与开发环境学习笔记01;
  • QT摄像头采集
  • C语言第三十四弹---动态内存管理(下)