/**
* 给定一个二叉树,判断其是否是一个有效的二叉搜索树。
* <p>
* 假设一个二叉搜索树具有如下特征:
* <p>
* 节点的左子树只包含小于当前节点的数。
* 节点的右子树只包含大于当前节点的数。
* 所有左子树和右子树自身必须也是二叉搜索树。
*/
/**
*
* @param root 根节点
* @return
*/
public boolean isValidBST(TreeNode root) {
//初始最小最大值为Long对应的最小最大值
return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
}
/**
* 功能:判断以root为根节点的子树的左右节点是否在指定的范围
*
* @param root 二叉树根节点
* @param lower 以root为根节点的满足二叉搜索树的最小值
* @param upper 最大值
* @return 返回判断的结果
*/
public boolean isValidBST(TreeNode root, long lower, long upper) {
//如果根节点为空
if (root == null) {
return true;
}
//如果当前节点的值不满足二叉搜索树的条件
if (!(root.val > lower && root.val < upper)) {
return false;
}
//向左向右递归判断
return isValidBST(root.left, lower, root.val) && isValidBST(root.right, root.val, upper);
}
原文:https://www.cnblogs.com/mx-info/p/14911245.html