难度中等519收藏分享切换为英文关注反馈
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:
2
/ \
1 3
输出: true
示例 2:
输入:
5
/ \
1 4
/ \
3 6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。
我们去找每一个节点得子树,只要左边得子树有一个不小于根节点,或者事右边得子树有一个不大于根节点得话,那就是不是一个合格得二叉搜索树。为什么要家null进去呢?其实你想一下,光以根节点作为判断条件,但是你递归后怎么知道我这个子树是左子树还是右子树呢,加进去null其实就是为了解决这个。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isValidBST(TreeNode root){
return panduan(root,null,null);
}
public boolean panduan(TreeNode root,Integer l,Integer r) {
if(root==null)
return true;
if(l!=null&&root.val<=l) return false;
if(r!=null&&root.val>=r) return false;
return panduan(root.left,l,root.val)&&panduan(root.right,root.val,r);
}
}