题目
Python
参考:https://leetcode.cn/problems/validate-binary-search-tree/solutions/2020306/qian-xu-zhong-xu-hou-xu-san-chong-fang-f-yxvh/?envType=study-plan-v2&envId=top-100-liked
前序遍历!!!
class Solution:
def isValidBST(self, root: Optional[TreeNode]) -> bool:
return self.judge(root, -inf, inf)
def judge(self, root, leftVal, rightVal):
if not root:
return True
x = root.val
return (leftVal < x < rightVal
and self.judge(root.left, leftVal, x)
and self.judge(root.right, x, rightVal))
Java
class Solution {
public boolean isValidBST(TreeNode root) {
if (root == null || (root.left == null && root.right == null)) {
return true;
}
TreeNode maxLeftNode = root.left;
TreeNode minRightNode = root.right;
while (maxLeftNode != null && maxLeftNode.right != null) {
maxLeftNode = maxLeftNode.right;
}
while (minRightNode != null && minRightNode.left != null) {
minRightNode = minRightNode.left;
}
if (root.left == null) {
return (root.val < minRightNode.val) && isValidBST(root.right);
} else if (root.right == null) {
return (maxLeftNode.val < root.val) && isValidBST(root.left);
}
return (maxLeftNode.val < root.val)
&& (root.val < minRightNode.val)
&& isValidBST(root.left)
&& isValidBST(root.right);
}
}