您所查看的帖子来源于考研论坛(bbs.kaoyan.com)
求懂数据结构的达人们进来吧 ̄谢谢了二叉树的结点删除这个程序实在是看不懂了,上来求大家帮个忙。能给我解是一下。。QQ469293094
A-^H4cI3vd}6gTW5Y
程序在书P230页上,源程序如下:
|8FZa!O `b
Status Delete(BiTree &p){
|*T;\RB$C Y
//从二叉排序树中删除结点p,并重接它的左或右子树
4\'{Ix;V d
if (!p->rchild){ //右子树空则只需重接它的左子树
3AFrk0O
q=p; p=p->lchild; free(q);
j!oYm
F
}
Zq G v Pt
else if(!p->lchild){ // 只需重接它的右子树
-Bi.LM:aM
NXH0n
q=p; p=p->rchild; free(q);
!MD6tN_C\ws6st]
}
k(msX9{,Xkb;B
else{ // 左右子树均不空
cwqi$g[(y
q=p; s=p->lchild;
yv[ cvnD,_
while(s->rchild){q=s; s=s->rchild} //专左,然后向右到尽头
7Zg"e;B\G
p->data=s->data; //s指向被删除结点的前缀
@,d7K)R6dsP!e
if(q!=p) q->rchild=s->lchild; //重接*q的左子树
GE'\VW
else q->lchild=s->lchild; //重接*q的右子树
u:`X.h&K-z5XG l:z#R1d
delete s;
ci'_'E$hY\*Q
}
$cy,Z b#j(RA
return TRUE;
#acP;MO;e|3TP~
}特别是。。左右子树均不空的时候。if(q!=p) 。它一会把S赋给Q。一会把P赋给Q。。到底是哪个。
@P2KpMWR6Y
第三部分不太懂。。谢谢了 ̄
转载请注明出自bbs.kaoyan.com,本贴地址:
http://bbs.kaoyan.com/viewthread.php?tid=2244459