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

两种做法——判断是否是二叉搜索树

https://leetcode.cn/problems/validate-binary-search-tree/description/?envType=study-plan-v2&envId=top-interview-150
在这里插入图片描述

方法一:中序遍历

考虑只有两个节点和一个结点的情况,可以头尾各加一个最大最小值,不用特判了,也可以直接特判1和0

由于测试样例里有最大值,所以INT最大值不够用

class Solution {
    List<Long> list = new ArrayList<>();
    public void dfs(TreeNode root){
        if(root==null) return;
        dfs(root.left);
        list.add((long)root.val);
        dfs(root.right);
    }
    public boolean isValidBST(TreeNode root) {
        list.add(Long.MIN_VALUE);
        dfs(root);
        list.add(Long.MAX_VALUE);
        for(int i = 1 ;i < list.size()-1; i++)
            if(list.get(i-1)>=list.get(i)||list.get(i)>=list.get(i+1))
                return false;
        return true;
    }
}
class Solution {
    List<Integer> list = new ArrayList<>();
    public void dfs(TreeNode root){
        if(root==null) return;
        dfs(root.left);
        list.add(root.val);
        dfs(root.right);
    }
    public boolean isValidBST(TreeNode root) {
        dfs(root);
        if(list.size()==1) return true;
        if(list.size()==2){
            if(list.get(1)>list.get(0)) return true;
            else return false;
        }
        for(int i = 1 ;i < list.size()-1; i++)
            if(list.get(i-1)>=list.get(i)||list.get(i)>=list.get(i+1))
                return false;
        return true;
    }
}

递归法:

非常精妙的区间法,利用区间进行递归。

在这里插入图片描述

class Solution {
    public boolean dfs(TreeNode root,long left,long right){
        if(root==null) return true;
        if(root.val>=right||root.val<=left)return false;
        return dfs(root.left,left,root.val)&&dfs(root.right,root.val,right);
    }
    public boolean isValidBST(TreeNode root) {
        return dfs(root, Long.MIN_VALUE,Long.MAX_VALUE);
    }
}

http://www.kler.cn/news/160980.html

相关文章:

  • 【Proteus仿真】【STM32单片机】简易计算器
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • 什么是堆内存?参数如何设置?
  • 【LeetCode】2621. 睡眠函数
  • ETLCloud详解,如何实现最佳实践及问题排查
  • 代码随想录算法训练营第五十八天 | 793.每日温度,496.下一个更大元素 I
  • LabVIEW开发自适应降噪ANC
  • vue的propsData
  • 04 ECharts基础入门
  • MySQL和MongoDB简介以及它们之间的区别
  • ThinkPHP6使用Validate验证表单字段唯一
  • 【每日一题】重新规划路线
  • 【C++初阶】六、类和对象(初始化列表、static成员、友元、内部类)
  • 脉冲压缩及MATLAB仿真
  • 数组常用方法
  • 剧本杀小程序搭建:打造线上剧本杀新体验
  • HTML 块级元素与行内元素有哪些以及注意、总结
  • EasyExcel如何读取全部Sheet页数据方法
  • leetcode刷题:611.有效三角形的个数(双指针实现)
  • C++中单引号‘‘和双引号““的区别
  • Linux内核上游提交完整流程及示例
  • 多人聊天室
  • Python实现广义线性回归模型(statsmodels GLM算法)项目实战
  • Oracle 查询语句限制只选择最前面几行,和最后面几行的实现方式。
  • GAN:WGAN前作
  • 【玩转TableAgent 数据智能分析】-- 数据分析不再是专业人士的专利
  • 如何使用Net2FTP轻松部署本地Web文件管理器并远程访问管理内网资源?
  • [⑦ADRV902x]: JESD204学习笔记
  • 【Spark基础】-- 宽窄依赖
  • 【学习笔记】插值之拉格朗日插值(Lagrange)