BST:
二叉搜索树,每一个最小BST的左节点,都要小于它的root,而右节点都要大于它的root;但是要看子数是否也满足这种情况,右节点子树的左节点,也要小于子树的root,但是大于父树的root。
例如上面图中的3节点要大于5,但是要小于6,不然不满足BST的定义
代码
public class IsValidBST {
public static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public boolean helper(TreeNode node, Integer lower, Integer upper) {
if (node == null) {
return true;
}
int val = node.val;
if (lower != null && val <= lower) {
return false;
}
if (upper != null && val >= upper) {
return false;
}
if (!helper(node.right, val, upper)) {
return false;
}
if (!helper(node.left, lower, val)) {
return false;
}
return true;
}
public boolean isvalidBST(TreeNode root) {
return helper(root, null, null);
}
public static void main(String[] args){
TreeNode root = new TreeNode(5);
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(6);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(7);
root.left = node1;
root.right = node2;
node2.left = node3;
node2.right = node4;
IsValidBST tt = new IsValidBST();
System.out.println(tt.isvalidBST(root));
}
}