public boolean isValidBST(TreeNode root) {
int[] minmax = new int[2];
return isBST(root, minmax);
}
public boolean isBST(TreeNode root, int[] minmax) {
if (root == null) { // 空树也算是 BST
return true;
}
if (root.left == null && root.right == null) {
minmax[0] = root.val;
minmax[1] = root.val;
return true;
}
// 当左子树为空时,以root为根的树的 minLeft maxLeft 的值
int minLeft = root.val;
int maxLeft = root.val;
boolean result = true;
if (root.left != null) {
result = isBST(root.left, minmax);
if (!result) return false; // 左子树都不是 BST了,直接返回
minLeft = minmax[0];
maxLeft = minmax[1];
// 比左子树最大值小
if (root.val <= maxLeft) {
return false;
}
}
// 当右子树为空时,minRight、maxRight的值
int minRight = root.val;
int maxRight = root.val;
if (root.right != null) {
result = isBST(root.right, minmax);
if (!result) return false; // 右子树都不是 BST了,直接返回
minRight = minmax[0];
maxRight = minmax[1];
if (root.val >= minRight) {
return false;
}
}
// 还能到达者说明是 BST 了
minmax[0] = minLeft;
minmax[1] = maxRight; // 更改以节点 root 为BST的最小值、最大值
return true;
}
网友评论