青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

對于一般的二叉樹來說,刪去樹中的一個結(jié)點是沒有意義的,因為它將使以被刪除的結(jié)點為根的子樹變成森林,破壞了整棵樹的結(jié)構(gòu)
但是,對于二叉排序樹,刪去樹上的一個結(jié)點相當于刪去有序序列中的一個記錄,只要在刪除某個結(jié)點后不改變二叉排序樹的特性即可。
??????在二叉排序樹上刪除一個結(jié)點的算法如下:
btree?*?DeleteBST(btree?*b,?ElemType?x)
{
??????if?(b)
??????{
????????????if?(b->data?==?x)
??????????????????b?=?DelNode(b);
????????????else?if?(b->data?>?x)
??????????????????b->lchild?=?DeleteBST(b->lchild,?x);
????????????else
??????????????????b->rchild?=?DeleteBST(b->rchild,?x);
??????}
??????return?b;
}
其中刪除過程有兩種方法。
第一種過程如下:
1。若p有左子樹,找到其左子樹的最右邊的葉子結(jié)點r,用該葉子結(jié)點r來替代p,把r的左孩子
作為r的父親的右孩子。
2。若p沒有左子樹,直接用p的右孩子取代它。

第二種過程如下:
1。若p有左子樹,用p的左孩子取代它;找到其左子樹的最右邊的葉子結(jié)點r,把p的右子樹作為r
的右子樹。
2。若p沒有左子樹,直接用p的右孩子取代它。
????兩種方法各有優(yōu)劣,第一種操作簡單一點點,但均衡性不如第二種,因為它將結(jié)點p的右子樹
全部移到左邊來了。下面將分別以兩種種思路編寫代碼。


第一種:
btree?*?DelNode(btree?*p)
{
??????if?(p->lchild)
??????{
????????????btree?*r?=?p->lchild;???//r指向其左子樹;
????????while(r->rchild?!=?NULL)//搜索左子樹的最右邊的葉子結(jié)點r
????????{
????????????r?=?r->rchild;
????????}
????????????r->rchild?=?p->rchild;

????????????btree?*q?=?p->lchild;???//q指向其左子樹;
????????????free(p);
????????????return?q;
??????}
??????else
??????{
????????????btree?*q?=?p->rchild;???//q指向其右子樹;
????????????free(p);
????????????return?q;
??????}
}

第二種:
btree?*?DelNode(btree?*p)
{
??????if?(p->lchild)
??????{
????????????btree?*r?=?p->lchild;???//r指向其左子樹;
????????????btree?*prer?=?p->lchild;???//prer指向其左子樹;
????????while(r->rchild?!=?NULL)//搜索左子樹的最右邊的葉子結(jié)點r
????????{
??????????????????prer?=?r;
????????????r?=?r->rchild;
????????}

????????if(prer?!=?r)//若r不是p的左孩子,把r的左孩子作為r的父親的右孩子
????????{
??????????????????prer->rchild?=?r->lchild;
??????????????????r->lchild?=?p->lchild;?//被刪結(jié)點p的左子樹作為r的左子樹
????????????}
????????r->rchild?=?p->rchild;?//被刪結(jié)點p的右子樹作為r的右子樹

????????????free(p);
????????????return?r;
??????}
??????else
??????{
????????????btree?*q?=?p->rchild;???//q指向其右子樹;
????????????free(p);
????????????return?q;
??????}
}
????但是上面這種方法,把r移來移去,很容易出錯,其實在這里我們刪除的只是p的元素值,而不是它的地址,所以完全沒有必要移動指針。仔細觀察,發(fā)現(xiàn)我們刪除的地址實際上是p的左子樹的最右邊的葉子結(jié)點r的地址,所以我們只要把r的數(shù)據(jù)填到p中,然后把r刪除即可。
算法如下:
btree?*?DelNode(btree?*p)
{
??????if?(p->lchild)
??????{
????????????btree?*r?=?p->lchild;???//r指向其左子樹;
????????????btree?*prer?=?p->lchild;???//prer指向其左子樹;
????????while(r->rchild?!=?NULL)//搜索左子樹的最右邊的葉子結(jié)點r
????????{
??????????????????prer?=?r;
????????????r?=?r->rchild;
????????}
????????????p->data?=?r->data;

????????if(prer?!=?r)//若r不是p的左孩子,把r的左孩子作為r的父親的右孩子
??????????????????prer->rchild?=?r->lchild;
????????????else
????????????p->lchild?=?r->lchild;?//否則結(jié)點p的左子樹指向r的左子樹

????????????free(r);
????????????return?p;
??????}
??????else
??????{
????????????btree?*q?=?p->rchild;???//q指向其右子樹;
????????????free(p);
????????????return?q;
??????}
}
Posted on 2006-06-04 16:52 夢想飛揚 閱讀(1978) 評論(2)  編輯 收藏 引用

Feedback

# re: 二叉排序樹的刪除  回復(fù)  更多評論   

2006-10-23 17:11 by coolaway
btree * DeleteBST(btree *b, ElemType x)
{
if (b)
if (x< b->data)
DeleteBST(b->lchild, x);
else if (x> b->data)
DeleteBST(b->rchild, x);
else if(b->lchild != null && b->rchild != null)
{
btree *temp = Min(b->rchild); // find the min key value in right child
DeleteBST(temp,temp->data);
}
else
{
if(b->rchild == null) b=b->lchild;
else if(b->lchild == null) b=b->rchild;
}

}

# re: 二叉排序樹的刪除  回復(fù)  更多評論   

2007-10-15 12:48 by csuzl
二叉排序樹刪除節(jié)點
Status DeleteBST(BiTree &T, Keytype key,Bitree f) //引進f為T的父節(jié)點
{
if(!T) return FALSE;
else
{
if(EQ(key,T->data.key))
return Delete(T,f);
else
if(LT(key,T->data.key))
{
f = T;
return DeleteBST(T->lchild,key,f);
}

else
{
f = T;
return DeleteBST(T->rchile,key);
}

}
}

Status Delete(Bitree &p,Bitree f)
{
if(!p->rchild)
{
if(p==f->lchild)
f->lchild = p->lchild;
else
f->rchild = p->rchild;
free(p);
}
else if(!p->lchild)
{
if(f->lchild==p)
f->lchild = p->rchild;
else
f->rchild = p->rchild;
free(q);
}
else
{
BiTree q = p,s = p->rchild;
while(s->lchild)
{
q = s;
s = s->lchild; // 利用二叉排序樹的前驅(qū)后繼直觀圖幫助理解
} //探索p的直接前驅(qū),最后得到其為s(s->lchild==NULL).
p->data = s->data; //覆蓋,容易理解
if(q==p) // while未執(zhí)行,有s=p->rchild,s覆蓋p,s位置由s->rchild占據(jù).
q->rchild = s->rchild;  
else        //   未執(zhí)行else前有,q->lchild=s;
q->lchild = s->rchild; 
free(s);
}

最后else部分亦可更改為:
else //利用直接前驅(qū)s替代p
{
BiTree q = p,s = p->lchild;
while(s->rchild)
{
q = s;
s = s->rchild;
} //探索p的直接前驅(qū),最后得到其前驅(qū)為s(s->rchild==NULL).
p->data =s->data;
if(q==p)
q->lchild = s->lchild;
else
q->rchild = s->lchild;
free(s);
}

}


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美高清视频一区| 欧美日韩不卡一区| 国外成人在线视频网站| 欧美一区二区视频网站| 亚洲欧美不卡| 国产精品一区二区黑丝| 久久久久成人精品| 久久久久久综合网天天| 亚洲日韩中文字幕在线播放| 亚洲激情视频在线| 欧美三级视频在线播放| 亚洲欧美日韩另类精品一区二区三区| 亚洲视频在线观看一区| 国产欧美精品| 欧美风情在线观看| 欧美日韩在线播放三区四区| 欧美亚洲三级| 老司机凹凸av亚洲导航| 日韩手机在线导航| 亚洲免费视频成人| 亚洲娇小video精品| 一区二区三区久久久| 国产日产欧产精品推荐色| 免费中文日韩| 欧美色一级片| 欧美chengren| 国产精品资源| 亚洲国产精品免费| 国产精品网站在线| 亚洲国产精品999| 国产精品你懂得| 亚洲电影欧美电影有声小说| 国产精品乱码一区二区三区| 欧美成人精品福利| 国产伦精品一区二区三区视频黑人| 久久综合网色—综合色88| 欧美色另类天堂2015| 免费成人毛片| 国产精品自拍三区| 亚洲美女免费视频| 在线播放日韩专区| 午夜电影亚洲| 亚洲一区日韩| 欧美国产精品人人做人人爱| 久久久久久久尹人综合网亚洲| 欧美日韩国产在线一区| 欧美激情按摩在线| 一区二区视频免费完整版观看| 欧美国产日韩二区| 国内精品福利| 午夜亚洲性色视频| 在线亚洲自拍| 欧美国产精品一区| 亚洲大片一区二区三区| 狠狠色综合播放一区二区| 亚洲一区在线看| 亚洲一区bb| 欧美日韩日韩| 亚洲毛片视频| 一区二区欧美国产| 欧美韩日精品| 91久久香蕉国产日韩欧美9色| 亚洲成色777777女色窝| 久久免费国产精品| 猛干欧美女孩| 亚洲激情在线激情| 可以免费看不卡的av网站| 麻豆91精品| 在线日韩日本国产亚洲| 久久精品国产一区二区三区| 久久精品一区二区三区不卡牛牛| 国产农村妇女精品| 午夜欧美精品| 久久性天堂网| 亚洲国产成人av| 欧美大片免费观看在线观看网站推荐| 另类成人小视频在线| 亚洲电影免费观看高清| 免费亚洲电影在线| 亚洲精品视频啊美女在线直播| 日韩午夜在线视频| 国产精品区免费视频| 午夜精品免费视频| 美腿丝袜亚洲色图| 夜夜爽www精品| 国产精品激情av在线播放| 亚洲综合日本| 免费观看国产成人| 日韩视频在线一区二区| 国产精品国产三级国产专区53| 亚洲欧美自拍偷拍| 你懂的一区二区| 一二美女精品欧洲| 国产亚洲激情视频在线| 久久性天堂网| 一本色道久久综合亚洲精品不卡 | 玖玖综合伊人| 亚洲精选一区二区| 欧美亚洲网站| 亚洲精品国产精品国自产在线 | 亚洲电影在线看| 欧美国产一区二区在线观看| 一区二区日本视频| 老牛影视一区二区三区| 99精品视频一区| 国产午夜精品久久久| 欧美精品日韩综合在线| 午夜精品短视频| 亚洲国产综合91精品麻豆| 欧美一级久久久| 亚洲久久一区| 国产一区白浆| 欧美体内谢she精2性欧美| 久久精品综合一区| 亚洲少妇最新在线视频| 欧美高清你懂得| 久久国产精品黑丝| 在线一区观看| 亚洲精品中文字| 黑丝一区二区| 国产精品自在欧美一区| 欧美精品在线免费播放| 久久久天天操| 欧美一区永久视频免费观看| 一区二区三区欧美视频| 亚洲电影观看| 欧美aaaaaaaa牛牛影院| 久久久久久噜噜噜久久久精品| 亚洲午夜精品| 一区二区三区四区国产| 亚洲高清毛片| 雨宫琴音一区二区在线| 国产一区二区高清视频| 国产精品美女在线| 国产精品久久久久毛片大屁完整版 | 久久久青草婷婷精品综合日韩| 在线一区亚洲| 日韩视频欧美视频| 亚洲日产国产精品| 亚洲福利视频一区二区| 欧美成人午夜77777| 毛片基地黄久久久久久天堂| 久久精品中文| 久久久久久噜噜噜久久久精品| 欧美一级在线视频| 欧美一区二视频| 欧美在线国产精品| 欧美一区中文字幕| 欧美一区免费视频| 久久精品国产99国产精品澳门| 欧美在线不卡| 久久久久久午夜| 免费高清在线一区| 亚洲高清视频在线| 99国产精品自拍| 亚洲视频每日更新| 亚洲女性喷水在线观看一区| 欧美亚洲三级| 久久综合给合| 欧美看片网站| 国产精品女主播在线观看| 国产日本欧美一区二区| 激情自拍一区| 亚洲久色影视| 午夜精品av| 久久综合九色综合欧美就去吻 | 亚洲午夜久久久久久尤物| 亚洲婷婷综合久久一本伊一区| 中文日韩欧美| 欧美一区三区三区高中清蜜桃| 久久久国产精品亚洲一区| 欧美成人tv| 一区二区三区日韩欧美| 欧美一区二区三区四区夜夜大片| 久久精品视频在线看| 欧美成人精品一区二区| 欧美色一级片| 精品1区2区3区4区| 宅男噜噜噜66国产日韩在线观看| 午夜影院日韩| 欧美成人性网| 亚洲天堂偷拍| 久久精品视频在线播放| 欧美日韩国产一级片| 国产日韩综合| 一区二区日韩伦理片| 久久久水蜜桃| 日韩视频在线观看国产| 欧美在线影院| 欧美午夜宅男影院| 在线观看不卡| 欧美一区二区免费观在线| 亚洲丰满在线| 久久国产精品99国产| 国产精品v欧美精品v日本精品动漫| 激情文学综合丁香| 欧美一区二区精品| 亚洲免费观看视频| 免费看黄裸体一级大秀欧美| 国产三级欧美三级|