Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than the node's key.
- The right subtree of a node contains only nodes with keys greater than the node's key.
- Both the left and right subtrees must also be binary search trees.
Example 1:
2 / \ 1 3Binary tree
[2,1,3]
, return true.
Example 2:
1 / \ 2 3
Binary tree [1,2,3]
, return false.
解法一:
中序遍历
public class ValidateBinarySearchTree {
public boolean isValidBST(TreeNode root) {
if(root==null||root.left==null&&root.right==null)return true;
List<Integer> answerList=new ArrayList<>();
isValidBSTHelp(root, answerList);
for(int i=0;i<answerList.size()-1;i++)
{
if(answerList.get(i)>=answerList.get(i+1))
{
return false;
}
}
return true;
}
public void isValidBSTHelp(TreeNode root,List<Integer> answerList)
{
if(root==null)return;
isValidBSTHelp(root.left, answerList);
answerList.add(root.val);
isValidBSTHelp(root.right, answerList);
}
}
解法二(官方解答):
public class Solution {
public boolean isValidBST(TreeNode root) {
return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
}
public boolean isValidBST(TreeNode root, long minVal, long maxVal) {
if (root == null) return true;
if (root.val >= maxVal || root.val <= minVal) return false;
return isValidBST(root.left, minVal, root.val) && isValidBST(root.right, root.val, maxVal);
}
}