题目描述
题目难度:Medium
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.
AC代码1
利用BST的性质:
对一个BST进行中序遍历,其结果是递增序列。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isValidBST(TreeNode root) {
if(root == null) return true;
List<Integer> list = new ArrayList<>();
helper(root, list);
return isSorted(list);
}
private void helper(TreeNode root, List<Integer> list){
if(root == null) return;
helper(root.left, list);
list.add(root.val);
helper(root.right, list);
}
private boolean isSorted(List<Integer> list){
for(int i = 1;i < list.size();i++)
if(list.get(i) <= list.get(i - 1)){
return false;
}
return true;
}
}
AC代码2
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);
}
}