方法一:利用中序遍历
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.*;
public class Solution {
public boolean isValidBST(TreeNode root) {
ArrayList<TreeNode> list = new ArrayList<TreeNode>();
if(root ==null)
return true;
inorder(root,list);
for(int i=0;i<list.size()-1;i++){
if(list.get(i).val>=list.get(i+1).val)
return false;
}
return true;
}
public static void inorder(TreeNode root,ArrayList<TreeNode> list){
if(root!=null){
inorder(root.left,list);
list.add(root);
inorder(root.right,list);
}
}
方法二:
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.*;
public class Solution {
public boolean isValidBST(TreeNode root) {
if(root==null)
return true;
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
TreeNode pre = null;
while(!stack.isEmpty() || cur!=null){
if(cur==null){
cur = stack.pop();
if(pre!=null && pre.val>=cur.val)
return false;
pre = cur;
cur = cur.right;
}else{
stack.push(cur);
cur = cur.left;
}
}
return true;
}
}