LeetCode--98.验证二叉搜索树(二叉树)

98.验证二叉搜索树

题目描述

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

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

  • 节点的左子树只包含 严格小于 当前节点的数。
  • 节点的右子树只包含 严格大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

复制代码
输入:root = [2,1,3]
输出:true

示例 2:

复制代码
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

提示:

  • 树中节点数目范围在[1, 10^4] 内
  • -231 <= Node.val <= 231 - 1

图解思路

中序遍历体现二叉搜索树的特征:

代码

java 复制代码
/**
 * 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 TreeNode pre = null;

    public boolean isValidBST(TreeNode root) {

        if(root == null) return false;

        // 遍历左子树
        boolean isLeftValid = true;
        if(root.left != null) isLeftValid = isValidBST(root.left);

        // 处理中间节点
        boolean valid = true;
        if(pre != null && root.val <= pre.val){
            valid = false;
        }
        pre = root;

        // 遍历右子树
        boolean isRightValid = true;
        if(root.right != null) isRightValid = isValidBST(root.right);

        return isLeftValid && isRightValid && valid;
    }
}
相关推荐
海绵宝宝转agent16 小时前
JUC高频面试八股总结个人开源
面试·职场和发展
Nil20818 小时前
leetcode 118杨辉三角
算法·leetcode·职场和发展
wanderist.20 小时前
线性筛法详解:从筛质数到欧拉函数、Möbius 函数与约数函数
java·数据结构·算法
All for pursuit.20 小时前
【设计-1】208.实现Trie (前缀树)
数据结构·c++·算法·leetcode
weixin_3077791320 小时前
C++代码实现MATLAB中的crossval函数功能
开发语言·c++·算法·matlab
青少儿编程课堂20 小时前
背包问题(0/1 背包与完全背包)解题精讲——动态规划入门
c++·python·算法·bfs·信息学竞赛
光影少年21 小时前
为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?
前端·javascript·算法
HEJOO921 小时前
Linux 设备驱动系列——使用全局工作队列
java·linux·算法
Code_Solitude21 小时前
c语言:递归
java·c语言·算法
我命由我123451 天前
Photoshop - Photoshop 使用内容识别填充移除对象
学习·职场和发展·产品运营·求职招聘·职场发展·学习方法·photoshop