题目
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.is_valid(root, left=-inf, right= inf)
def is_valid(self, root: Optional[TreeNode], left: int, right: int):
if root == None:
return True
x = root.val
return (left < x < right
and self.is_valid(root.left, left, x)
and self.is_valid(root.right, x, right))
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);
}
}