98.验证二叉搜索树
解题思路
package leadcode;
import leadcode.lib.TreeNode;
import leadcode.lib.TreeNodeInit;
/**
* @author : icehill
* @description : 验证二叉搜索树
* 给定一个二叉树,判断其是否是一个有效的二叉搜索树。
* 假设一个二叉搜索树具有如下特征:
* 节点的左子树只包含小于当前节点的数。
* 节点的右子树只包含大于当前节点的数。
* 所有左子树和右子树自身必须也是二叉搜索树。
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/validate-binary-search-tree
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
* 解题思路:
* 1.递归
* @date : 2021-05-04
*/
public class Solution98 {
public static void main(String[] args) {
Solution98 solution98 = new Solution98();
Integer[] array1 = {6, 4, 8, null, null, 5, 9};
Integer[] array2 = {1, 1};
Integer[] array3 = {2, 1, 3};
TreeNode root1 = TreeNodeInit.createTreeNode(array1, 1);
TreeNode root2 = TreeNodeInit.createTreeNode(array2, 1);
TreeNode root3 = TreeNodeInit.createTreeNode(array3, 1);
System.out.println(solution98.isValidBST(root1));
// System.out.println(solution98.isValidBST(root2));
// System.out.println(solution98.isValidBST(root3));
}
public boolean isValidBST(TreeNode root) {
return isValidTree(root, null, null);
}
private boolean isValidTree(TreeNode head, Integer lower, Integer upper) {
if (head == null) {
return true;
}
int val = head.val;
if (lower != null && lower <= val) {
return false;
}
if (upper != null && upper >= val) {
return false;
}
if (!isValidTree(head.left, val, upper)) {
return false;
}
if (!isValidTree(head.right, lower, val)) {
return false;
}
return true;
}
}