分析:
对于每个结点,需要检查其左子树中的最大值是否小于当前结点的值,且右子树中的最小值是否大于当前结点的值
而我们知道对于一棵二叉树搜索树来说,其每一棵子树也都是二叉搜索树,且其最小值为最左边的结点,最大值为最右边的结点。
所以反过来讲,就是如果一棵普通二叉树的任意一棵左子树中的最大值(左子树的最右边结点)大于等于当前根结点或者任意一棵右子树的最小值(右子树的最左边结点)小于当前根结点,那么这棵树就不是二叉搜索树。
此算法时间复杂度为O(n2n^2n2),空间复杂度为O(nnn)
Java版本实现
//获取左子树最右边结点
int getBRightOfLeftTree(BinaryTreeNode<T> root){
BinaryTreeNode<T> left = root.getLeft();
if(left == null) {
System.out.println("最大值:" + ((int)root.getData() - 1));
return (int)root.getData(