作者:disappearedgod
时间:2014-5-19
题目
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.
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
解法
递归
public boolean isValidBST(TreeNode root) {
return isValidBST(root, Integer.MIN_VALUE,Integer.MAX_VALUE);
}
public boolean isValidBST(TreeNode root, int min, int max){
if(root==null)
return true;
TreeNode l = root.left;
TreeNode r = root.right;
if(root.val>=max || root.val <= min)
return false;
return isValidBST(l,min,root.val) && isValidBST(r,root.val, max);
}
另一张想法
public boolean isValidBST(TreeNode root) {
LinkedList<Integer> l = new LinkedList<Integer>();
inorder(root , l);
Iterator i = l.iterator();
int pre = Integer.MIN_VALUE;
int now = 0;
while(i.hasNext()){
now = (int)i.next();
if(now<=pre)
return false;
pre = now;
}
return true;
}
public void inorder (TreeNode root, LinkedList l){
if(root!=null){
inorder(root.left,l);
l.add(root.val);
inorder(root.right,l);
}
}
非递归