98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:
2
/
1 3
输出: true
示例 2:
输入:
5
/
1 4
/
3 6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。
解题思路
递归遍历二叉树, 在递归时给出节点的值的上界和下界。
对于根节点, 设置初始的上界为LONG_MAX, 初始下界为LONG_MIN。
递归其左子树时, 上界修改为当前值, 下界还是当前节点的下界。
递归其右子树时, 上界修改为当前节点的上届, 下界修改为当前节点值。
递归的代码如下:
public boolean isValidBST(TreeNode root) {
return helper(root, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
public boolean helper(TreeNode node, int lower, int upper) {
if (node == null) {
return true;
}
if (node.val < lower || node.val > upper) {
return false;
}
return helper(node.left, lower, val) && helper(node.right, val, upper);
}