算法思想: 二叉排序树的中序遍历是有序(从小到大的)的我们只要按照二叉树中序输出的递归代码模板每次输出是与上一次输出的进行比较即可
注意:二叉树中序递归模板见----->传送门
int JudgeBST(BSTree *root){
if(root==NULL){ //空树是二叉排序树
return 1;
}
int a=JudgeBST(root->lchild); //判断左子树是否是二叉排序树
if(root->data<=pre||a==0){ //左子树不是二叉排序树
return 0; //如果其中的一颗子树不是二叉排序树那么 这个0就是一直被向上抛出到最上面的出口
}else{
pre=root->data;
}
int b=JudgeBST(root->rchild);//判断右子树是否是二叉排序树
return b;//这里的直接返回的原因是走到了这里左子树肯定是二叉排序树了对于整颗子树是不是二叉排序树只需要知道他的右子树是不是就行 所以直接返回结果就可以判断是不是二叉排序树了
}
对于递归代码不要想的太多只需要考虑“大局”,以及其中的一个子问题或者说临界点就行了不然就会陷进去浪费时间。