指针的引用

最初看到这样一句话:

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 了

你可能感兴趣的:(c++语法)