关于判断二叉查找树算法的问题:
清华大学出版社出版的由王春森主编的软考指定教材《系统设计师(高级程序员)教程》一书的P442页是一个判断一颗二叉树是不是二叉查找树的函数,我对此函数的运行结果有一些疑问,想请教一下各位高手,希望大家能够赐教,我这里先谢谢大家了。问题如下:
ins isSearchtree(NODE *t, int *minp, int *maxp)
{
int lmin,lmax,rmin,rmax;
if(t==NULL) return 1;
lmin=lmax=t->val;
if(t->lchild){
  if(isSearchtree(t->lchild,&lmin,&lmax)==0) return 0;
  if(t->val<=lmax)return 0;
}
rmin=rmax=t->val;
if(t->rchild){
  if(isSearchtree(t->rchild,&rmin,&rmax)==0) return 0;
  if(t->val>=rmin)return 0;
}
*minp=lmin;
*maxp=rmax;
return 1;
}
假定我们对如下二叉树(1,2,3,4,5,6,7)进行判定:
       4
       /\
      2 6
     /\   /\
    1  3 5  7我推导的过程是这样的:
刚进入函数时:
lmin=lmax=4,然后递归调用的结果是:
    lmin=lmax=2  再次递归调用的结果为:
        lmin=lmax=1,由于1的孩子为空进入下一个赋值
        rmin=rmax=1由于1的孩子为空进入下一个赋值
        *minp=lmin=1;    *maxp=rmax=1;将结果返回到上一层调用
**** 而此时的if(t->val<=lmax)return 0;判断由于lmax=2=t-val而结束整个判断,这是我的第一个疑问
****疑问二假定上边的判断不结束整个程序,那么由(*minp=lmin=1;    *maxp=rmax=1;将结果返回到上一层调用)带回的minp 和maxp两个参数最终是什么值,它在整个程序中的作用是什么?
****疑问三lmin=lmax=t->val;和rmin=rmax=t->val;在程序中的作用能否只用一组lmin和rmin来代替,我没有看出来这样的最小和最大的值是在什么时时候被修改成不一样的(因为我没有在程序中发现对这样的参数有单独赋值的语句,所以我认为这样的值没有什么区别,比如按照我上边的推导下边将出现rmin=lmax=2的赋值,二者的值还是一样)。