力扣98 验证二叉搜索树
题目:
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例:

输入:root = [2,1,3]
输出:true
思路:
这题最容易出现的错误思路就是:单纯的比较左节点小于中间节点,右节点大于中间节点。即使递归处理了,得到的结果也是错的,比如遇到以下情况:这里10>6,但是每一层都满足单层逻辑。

我们要比较的是 左子树所有节点小于中间节点,右子树所有节点大于中间节点。
class Solution {
TreeNode max;
public boolean isValidBST(TreeNode root) {//1.确定参数和返回值
if (root == null) {//2.确定终止条件
return true;
}
//3.单层逻辑:中序遍历,验证遍历的元素是不是从小到大
// 左
boolean left = isValidBST(root.left);
// 中
if (max != null && root.val <= max.val) {//如果当前节点值不大于上一个节点的值,则不满足二叉搜索树
return false;
}
max = root;
// 右
boolean right = isValidBST(root.right);
return left&&right;
}
}

浙公网安备 33010602011771号