最初看到这样一句话:

bool Delete(BST *&u,int v)
{
    if(u==NULL)return false;
    else if(u->v>v)return Delete(u->Ls,v);
    else if(u->v<v)return Delete(u->Rs,v);

    else
    {
        if(u->Ls&&u->Rs)
        {
            BST *temp=findmax(u->Ls);
            u->v=temp->v;
            return Delete(temp,temp->v);
        }
        else
        {
            if(u->Ls)u=u->Ls;
            else if(u->Rs)u=u->Rs;
            return true;
        }
    }
}

我说怎么这里u=u->Rs不是表示移动到他的右儿子么?但是在这里却表示为用u的右儿子把u给覆盖掉了,为啥跟以前用的不一样喃?
原来,关键之处在这里:BST *&u
用的是指针的引用

做了个实验:

int main() { BST *root=NULL; Insert(root,5); Insert(root,6); Insert(root,7); Insert(root,8); Insert(root,9); Insert(root,10); BST *&p=root; p=p->Rs; BST *pp=root; cout<<pp->v<<"\n"; }

这样出来的结果是6,而如果把 BST *&p=root 改成 BST *p=root 结果就是5 了