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

對于一般的二叉樹來說,刪去樹中的一個結點是沒有意義的,因為它將使以被刪除的結點為根的子樹變成森林,破壞了整棵樹的結構
但是,對于二叉排序樹,刪去樹上的一個結點相當于刪去有序序列中的一個記錄,只要在刪除某個結點后不改變二叉排序樹的特性即可。
??????在二叉排序樹上刪除一個結點的算法如下:
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有左子樹,找到其左子樹的最右邊的葉子結點r,用該葉子結點r來替代p,把r的左孩子
作為r的父親的右孩子。
2。若p沒有左子樹,直接用p的右孩子取代它。

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


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

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

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

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

Feedback

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

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: 二叉排序樹的刪除  回復  更多評論   

2007-10-15 12:48 by csuzl
二叉排序樹刪除節點
Status DeleteBST(BiTree &T, Keytype key,Bitree f) //引進f為T的父節點
{
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; // 利用二叉排序樹的前驅后繼直觀圖幫助理解
} //探索p的直接前驅,最后得到其為s(s->lchild==NULL).
p->data = s->data; //覆蓋,容易理解
if(q==p) // while未執行,有s=p->rchild,s覆蓋p,s位置由s->rchild占據.
q->rchild = s->rchild;  
else        //   未執行else前有,q->lchild=s;
q->lchild = s->rchild; 
free(s);
}

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

}

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 中文国产成人精品| 亚洲天堂激情| 午夜精品久久久久久久男人的天堂 | 亚洲伦理一区| 亚洲狼人综合| 小黄鸭视频精品导航| 久久久精品2019中文字幕神马| 久久国产黑丝| 欧美日韩另类国产亚洲欧美一级| 国产精品国产福利国产秒拍| 国产欧美一区二区精品性| 很黄很黄激情成人| 日韩视频免费在线| 久久久欧美精品| 欧美日韩人人澡狠狠躁视频| 国产精品国产三级国产aⅴ入口| 国产精品私拍pans大尺度在线| 欧美aⅴ一区二区三区视频| 欧美午夜国产| 精品69视频一区二区三区| 国产精品日韩欧美一区二区三区| 国产精品午夜电影| 亚洲人被黑人高潮完整版| 亚洲综合色激情五月| 欧美成人免费播放| 亚洲综合色丁香婷婷六月图片| 麻豆精品传媒视频| 国产一区二区三区在线观看免费视频 | 久久久综合香蕉尹人综合网| 亚洲激情精品| 久久久在线视频| 国产精品美女主播| 亚洲人午夜精品免费| 久久精品视频播放| 亚洲视频碰碰| 欧美日韩在线播放三区四区| 亚洲国产精彩中文乱码av在线播放 | 国产精品一页| 一本久道久久综合狠狠爱| 久久嫩草精品久久久久| 亚洲欧美在线免费观看| 欧美午夜一区| 一区二区欧美视频| 亚洲高清123| 久热精品在线| 亚洲电影网站| 韩国女主播一区| 久久9热精品视频| 午夜在线视频观看日韩17c| 国产精品露脸自拍| 午夜亚洲福利在线老司机| 一区二区三区欧美视频| 欧美精品一区在线| 日韩午夜免费视频| 亚洲人成7777| 欧美日本国产一区| 中国成人黄色视屏| aa级大片欧美| 国产精品亚洲精品| 久久嫩草精品久久久久| 久久久久久亚洲精品杨幂换脸| 国产真实久久| 欧美gay视频| 欧美激情精品久久久久久久变态 | 亚洲人久久久| 亚洲高清不卡| 欧美性一区二区| 亚洲欧美美女| 欧美制服第一页| 尤物yw午夜国产精品视频| 免费日韩成人| 欧美另类99xxxxx| 老鸭窝91久久精品色噜噜导演| 亚洲国产一区二区三区在线播| 久久久噜噜噜久久中文字免| 在线观看亚洲视频啊啊啊啊| 欧美国产日韩一区二区在线观看| 欧美大片在线观看一区| 国产精品99久久久久久白浆小说| 一区二区三区欧美在线观看| 国产一区二区精品丝袜| 免费看av成人| 久久激情五月丁香伊人| 久久久久久久91| 99精品热6080yy久久| 亚洲欧美成人一区二区在线电影 | 亚洲婷婷综合色高清在线| 亚洲伊人观看| 亚洲国产婷婷香蕉久久久久久99| 亚洲国产精品久久精品怡红院| 欧美午夜免费电影| 国产日韩一区二区| 亚洲电影免费观看高清完整版| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲一区二区三区在线播放| 欧美一区二区私人影院日本 | 欧美一区三区二区在线观看| 久久一区二区三区国产精品| 日韩小视频在线观看专区| 亚洲一区欧美激情| 亚洲国产精品一区二区第一页 | 日韩视频免费| 在线观看视频免费一区二区三区| 一区二区三区欧美视频| 91久久久国产精品| 久久精品电影| 久久不见久久见免费视频1| 欧美精品v国产精品v日韩精品| 久久精品国产亚洲精品| 国产精品久久久久9999吃药| 亚洲福利视频在线| 影音先锋另类| 欧美亚洲视频在线看网址| 亚洲社区在线观看| 欧美精品一区二区三区在线播放| 蜜臀av一级做a爰片久久| 国产日韩精品在线观看| 国产精品99久久久久久久女警 | 欧美激情第10页| 狠狠色丁香久久婷婷综合丁香| 亚洲午夜三级在线| 亚洲美女视频| 99精品热视频| 亚洲图片在线观看| 一本大道久久a久久精二百| 欧美99久久| 最新日韩精品| 亚洲精品资源| 欧美激情综合色综合啪啪| 欧美成人免费在线观看| 亚洲国产91| 亚洲国产成人porn| 久久精品视频在线看| 欧美午夜精品理论片a级大开眼界| 亚洲国产成人久久综合| 亚洲免费观看高清在线观看| 欧美成人免费观看| 亚洲精品美女免费| 亚洲线精品一区二区三区八戒| 欧美日韩在线不卡| 亚洲欧美电影在线观看| 久久精品欧美日韩精品| 国产日韩精品一区二区浪潮av| 亚洲一区中文字幕在线观看| 校园激情久久| 一区二区三区在线免费观看| 欧美在线二区| 亚洲国产高清自拍| 欧美剧在线观看| 亚洲欧美日韩精品| 久久免费少妇高潮久久精品99| 亚洲电影免费| 欧美日韩在线一区| 亚洲欧美久久久久一区二区三区| 欧美一级视频精品观看| 狠狠色狠狠色综合人人| 蜜桃精品久久久久久久免费影院| 亚洲国产专区| 久久国产精品久久国产精品| 亚洲福利视频三区| 国产精品高清一区二区三区| 久久本道综合色狠狠五月| 亚洲第一福利社区| 午夜欧美大尺度福利影院在线看 | 国产精品日韩精品| 久久久噜噜噜久久狠狠50岁| 亚洲人成网站精品片在线观看| 亚洲综合色噜噜狠狠| 1024成人网色www| 国产精品www.| 美日韩精品视频免费看| 亚洲视屏一区| 欧美激情免费观看| 欧美在线视屏| 亚洲毛片一区| 激情文学综合丁香| 国产精品v欧美精品∨日韩| 久久精品欧美日韩| 亚洲天堂av在线免费观看| 欧美大片在线影院| 欧美专区第一页| 99riav国产精品| 亚洲国产精品久久久久婷婷884| 国产精品久久久久久久久| 蜜臀av性久久久久蜜臀aⅴ| 亚洲影院一区| 一区二区三区精品在线| 欧美成人中文字幕| 久久国产精品久久久| 午夜精品国产精品大乳美女| 亚洲免费高清视频| 久久精品视频亚洲| 亚洲午夜久久久久久尤物| 欧美女同视频| 免费不卡视频|