二叉排序树删除节点只能正常删除左右子树不为空的节点

int DeleteTree(BSTree &p,int height)

{   BSTree s,q;

     if(p==NULL)

{ printf("没有该用户删除失败\n");

return 0;

}

if(!p->rchild )                              //没有右孩子

{

q=p;p=p->lchild ;delete q;q=NULL;

}

else if(!p->lchild )                      //没有左孩子

{

q=p; p=p->rchild ;delete q ;q=NULL;

}

else 

s=p->lchild;

q=p;

while(s->rchild)

{

q=s; s=s->rchild ;

}

p->data =s->data ;

if(q!=p)

q->rchild =s->lchild ;

else

q->lchild =s->rchild ;

delete s;

s=NULL;

}

p是要删除信息的树节点

这个函数只能正常删除左右孩子不为空的节点,删除其他节点我遍历输出信息会运行错误,有谁可以帮下我吗

慕神7194819
浏览 1573回答 1
1回答

BlueCitizen

实在看不懂这段,最好把花括号标齐,空格对上
打开App,查看更多内容
随时随地看视频慕课网APP