根据二叉搜索树的特点可以得出结论:
二叉搜索树的中序遍历结果排序从左到右依次递增。
那么通过一次中序遍历就可以检测该树是否为二叉搜索树。
代码如下:
class Solution {
public int temp=0;
public boolean firstNode=true;
public boolean isValidBST(TreeNode root) {
if(root==null){
return true;
}
//遍历左子树
if(!isValidBST(root.left)){
return false;
}
//利用firstNode来获取中序遍历的第一个值
//比较temp传递过来的值是否大于当前值,如果大于就说明前一个数大于现在节点的值,即不为二叉搜索树
if(!firstNode&&temp>=root.val)return false;
temp=root.val;
//利用firstNode来获取中序遍历的第一个值
firstNode=false;
//继续遍历
if(!isValidBST(root.right)){
return false;
}
return true;
//中序遍历的结果排列为从左到右依次递增
}
}