题目描述:
判断给出的二叉树是否是一个二叉搜索树(BST)
二叉搜索树的定义如下: 一个节点的左子树上节点的值都小于自身的节点值 一个节点的右子树上节点的值都小于自身的节点值 所有节点的左右子树都必须是二叉搜索树
解题思路:
- 解这道题之前我们应该弄清二叉树搜索的特性
- 二叉树中序遍历的结果正好是有序的
- 我们先将二叉树中序遍历,储存其结果
- 判断遍历后的数组是否满足有序即可
代码如下:
public boolean isValidBST(TreeNode root) {
if(root == null) return true;
ArrayList<Integer> list = new ArrayList<>();
getOrder(root,list);
// 判断该数组是否满足有序的特性
for(int i = 0; i < list.size() - 1; i++){
if(list.get(i) >= list.get(i + 1)){
return false;
}
}
return true;
}
// 中序遍历得到二叉树转化的数组
private void getOrder(TreeNode root,ArrayList<Integer> list){
if(root != null){
getOrder(root.left,list);
list.add(root.val);
getOrder(root.right,list);
}
}