1、题目描述
给定一棵二叉树,判断这棵树是否是二叉搜索树。
二叉搜索树的定义如下:
二叉搜索树(Binary Search Tree),又称二叉排序树,它或者是一颗空树,或者具有如下性质的树:
- 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
- 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值
- 它的左右子树也分别为二叉搜索树
2、思路
中序遍历二叉树,将节点的值依次加入到一个ArrayList中,遍历ArrayList,如果ArrayList中前面的元素大于等于后面的元素,则该二叉树不是一棵二叉搜索树。
3、代码如下
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
ArrayList<Integer> arr = new ArrayList<Integer>();
public boolean isValidBST(TreeNode root) {
if(root == null){
return true;
}
if(root.left==null && root.right==null){
return true;
}
inOrder(root);
for(int i=1;i<arr.size();i++){
if(arr.get(i)<=arr.get(i-1)){
return false;
}
}
return true;
}
/**
中序遍历二叉树
*/
public void inOrder(TreeNode root){
if(root.left != null){
inOrder(root.left);
}
arr.add(root.val);
if(root.right != null){
inOrder(root.right);
}
}
}