题目:给定一个二叉树根节点,请你判断这棵树是不是二叉搜索树。
解法一:通过中序遍历,将每个结点的值放入ArrayList中,然后再判断这个ArrayList是不是按顺序的。
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return bool布尔型
*/
private ArrayList<Integer> list = new ArrayList();
public boolean isValidBST (TreeNode root) {
// write code here
if(root == null) return true;
isValidBST(root.left);
list.add(root.val);
isValidBST(root.right);
return check(list);
}
public boolean check(ArrayList<Integer> list){
for(int i=0;i<list.size()-1;i++){
if(list.get(i)>=list.get(i+1))
return false;
}
return true;
}
}
解法二:结点法
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return bool布尔型
*/
private TreeNode preNode = null;
public boolean isValidBST (TreeNode root) {
// write code here
if(root == null) return true;
if(!isValidBST(root.left)) return false;
if(preNode != null){
if(preNode.val>=root.val) return false;
}
preNode = root;
isValidBST(root.right);
return true;
}
}