Status DeleteBST(BiTree &T, KeyType key)        {
    if (!p) return FALSE;         //不存在关键字等于key的数据元素
    else    {    
        if (EQ(key,T->data.key)) Delete(T);  //找到关键字等于key的数据元素
        else if (LT(key,T->data.key))    DeleteBST(T->lchild,key);
            else DeleteBST(T->rchild,key)
        return TRUE;
        }
}//DeleteBST

其中删除操作过程如下所描述~~~
void Delete(BiTree &p)    {
//若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据元素结点p,并返回TRUE;否则返回FALSE
    if (p->rchild)    { q=p; p=p->lchild; free(q); }//右子树空只需要重接它的左子树
    else if (!p->lchild) {q=p; p=p->rchild; free(q); } //左子树空只需要重接它的右子树
        else { q=p; s=p->lchild;
            while(!s->rchild)    {q=s; s=s->rchild }
            p->data=s->data;
            if(q!=p) q->rchild=s->lchild ;
            else q->lchild=s->lchild;
            free(s);
            }
}//Delete



我的疑问~针对左子树 或者 右子树 空的情况。
仅仅用p=p->lchild 怎么能接上呢?  

就比如 树            1
                2 <-p
             3
假设要删除结点2.如果仅仅操作 p=p->lchild 有什么用 虽然p是指向了3但是和结点1直接貌似没联系了。
如果要接上1和3 不是要用操作 1.lchild=2.lchild 或者{ p=p->lchild; 1.lchild=p}
么?