【算法训练】LeetCode#98 验证二叉搜索树
一、描述
98. 验证二叉搜索树
给你一个二叉树的根节点 root
,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3]
输出:true
示例 2:
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 。
二、思路
这道题与其他二叉树类型题类似,其实就是在遍历的同时判断子树大小而已。
哦,想错了,每个节点的所有右侧节点都应该大于他本身,所有左侧节点都应该小于他本身,我刚开始仅考虑到了当前层。
三、解题
public static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public static class Solution {
public boolean isValidBST(TreeNode root) {
return process(root,Long.MIN_VALUE,Long.MAX_VALUE);
}
// 对于左子树而言,需要考虑其是否大于根节点,对于右子树,考虑其是否小于根节点
public boolean process(TreeNode node, long minVal, long maxVal){
if (node == null){
return true;
}
if (node.val <= minVal || node.val >= maxVal){
return false;
}
return process(node.left,minVal,node.val) && process(node.right,node.val,maxVal);
}
}