一、题目
给定根节点,判断是否有一个有效的二叉搜索树。

二、思路
1、函数的作用判断该二叉树是否是二叉搜索树。二叉搜索树的左子树所有节点的值必须严格小于它,右子树中所有节点的值必须严格大于它。(是整个左/右子树,不仅仅是左右子节点)。
所以,需要每个节点都有一个合法区间,根节点的合法区间是 (-∞, +∞),左子节点的合法区间是 (-∞, root.val),右子节点的合法区间是 (root.val, +∞)。
每往下一层,合法区间就会被进一步限制,递归时必须传递上下界(min和max),isValidBST
(TreeNode root) 只接受一个参数(根节点),所以需要写一个辅助函数,传递min和max信息。
2、二叉搜索树特点
1)每个节点都有一个数据域,且所有节点的数据域互不相同。
2)左子树的所有节点的值都小于根节点的值。
3)右子树的所有节点的值都大于根节点的值。
4)左子树和右子树也分别为二叉搜索树。
5)中序遍历为升序数组。
三、代码
java
class Solution {
public boolean isValidBST(TreeNode root) {
return isValidBST(root,Long.MIN_VALUE,Long.MAX_VALUE);
}
public boolean isValidBST(TreeNode root,long min,long max){
if(root == null) return true;
if(root.val <= min || root.val >= max) return false;
return isValidBST(root.left,min,root.val) && isValidBST(root.right,root.val,max);
}
}