前言
二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
实现原理
将验证二叉搜索树计算同样可以转换为相同子问题,所以比较适合用递归。
1.递归的退出条件:
节点返回空为ture,节点的值不在对应数据大小范围内返回false。
2.递归方程:
check(TreeNode node,int min,int max).
node为root的左节点时,max更新为root.val
node为root的右节点时,min更新为root.val
具体代码实现
package test8;
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;
}
}
class Solution {
public boolean isValidBST(TreeNode root) {
return check(root,Long.MIN_VALUE,Long.MAX_VALUE);
}
public boolean check(TreeNode root,long min,long max){
if(root==null){
return true;
}
if(root.val<=min||root.val>=max){
return false;
}
return check(root.left,min,root.val)&&check(root.right,root.val,max);
}
public static void main(String[] args) {
Solution solution=new Solution();
TreeNode treeNode=new TreeNode(1);
treeNode.left=new TreeNode(2);
treeNode.left.left=new TreeNode(3);
treeNode.left.right=new TreeNode(4);
treeNode.right=new TreeNode(2);
treeNode.right.left=new TreeNode(4);
treeNode.right.right=new TreeNode(3);
int res=solution.isValidBST(treeNode);
System.out.println(res);
}
}
QA:待定