日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试问红黑树,我脸都绿了。。

發布時間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试问红黑树,我脸都绿了。。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

紅黑樹是一個平衡的二叉樹,但不是一個完美的平衡二叉樹。雖然我們希望一個所有查找都能在~lgN次比較內結束,但是這樣在動態插入中保持樹的完美平衡代價太高,所以,我們稍微放松逛一下限制,希望找到一個能在對數時間內完成查找的數據結構。這個時候,紅黑樹站了出來。

閱讀以下需要了解普通二叉樹的插入以及刪除操作。

紅黑樹是在普通二叉樹上,對沒個節點添加一個顏色屬性形成的,同時整個紅黑二叉樹需要同時滿足一下五條性質

紅黑樹需要滿足的五條性質:

性質一:節點是紅色或者是黑色;

在樹里面的節點不是紅色的就是黑色的,沒有其他顏色,要不怎么叫紅黑樹呢,是吧。

性質二:根節點是黑色;

根節點總是黑色的。它不能為紅。

性質三:每個葉節點(NIL或空節點)是黑色;

這個可能有點理解困難,可以看圖:

這個圖片就是一個紅黑樹,NIL節點是個空節點,并且是黑色的。

性質四:每個紅色節點的兩個子節點都是黑色的(也就是說不存在兩個連續的紅色節點);

就是連續的兩個節點不能是連續的紅色,連續的兩個節點的意思就是父節點與子節點不能是連續的紅色。

性質五:從任一節點到其沒個葉節點的所有路徑都包含相同數目的黑色節點;

從上圖可以看見相同數量的黑色節點有三個;

當我們進行插入或者刪除操作時所作的一切操作都是為了調整樹使之符合這五條性質。

下面我們先介紹兩個基本操作,旋轉。

旋轉的目的是將節點多的一支出讓節點給另一個節點少的一支,旋轉操作在插入和刪除操作中經常會用到,所以要熟記。

下面是左旋和右旋:

左旋:

右旋:

插入

下面講講插入

我們先明確一下各節點的叫法

因為要滿足紅黑樹的這五條性質,如果我們插入的是黑色節點,那就違反了性質五,需要進行大規模調整,如果我們插入的是紅色節點,那就只有在要插入節點的父節點也是紅色的時候違反性質四或者是當插入的節點是根節點時,違反性質二,所以,我們把要插入的節點的顏色變成紅色。

下面是可能遇到的插入的幾種狀況:

1、當插入的節點是根節點時,直接涂黑即可;

2、當要插入的節點的父節點是黑色的時候。

這個時候插入一個紅色的節點并沒有對這五個性質產生破壞。所以直接插入不用在進行調整操作。

3、如果要插入的節點的父節點是紅色且父節點是祖父節點的左支的時候。

這個要分兩種情況,一種是叔叔節點為黑的情況,一種是叔叔節點為紅的情況。

當叔叔為黑時,也分為兩種情況,一種是要插入的節點是父節點的左支,另一種是要插入的節點是父親的右支。

我們先看一下當要插入的節點是父節點的左支的情況:

這個時候違反了性質四,我們就需要進行調整操作,使之符合性質四,我們可以通過對祖父節點進行右旋同時將祖父節點和父節點的顏色進行互換,這樣就變成了:

經過這樣的調整可以符合性質四并且不對其他性質產生破壞。

當插入的節點是父節點的右支的時候:

當要插入的節點是父節點的右支的時候,我們可以先對父節點進行左旋,變成如下:

如果我們把原先的父節點看做是新的要插入的節點,把原先要插入的節點看做是新的父節點,那就變成了當要插入的節點在父節點的左支的情況,對,是的,就是按照當要插入的節點在父節點的左支的情況進行旋轉,旋轉完之后變成如下:

4、如果要插入的節點的父節點是紅色且父節點是祖父節點的右支的時候;

這個時候的情況跟情況3所表述的情況是一個鏡像,將情況3的左和右互換一下就可以了。

5、如果要插入的節點的父節點是紅色并且叔叔節點也為紅色,如下:

這個時候,只需將父親節點和叔叔節點涂黑,將祖父節點涂紅。

以上就是插入的全部過程。

刪除

首先你要了解普通二叉樹的刪除操作:

1、如果刪除的是葉節點,可以直接刪除;

2、如果被刪除的元素有一個子節點,可以將子節點直接移到被刪除元素的位置;

3、如果有兩個子節點,這時候就可以把被刪除元素的右支的最小節點(被刪除元素右支的最左邊的節點)和被刪除元素互換,我們把被刪除元素右支的最左邊的節點稱之為后繼節點(后繼元素),然后在根據情況1或者情況2進行操作。如圖:

將被刪除元素與其右支的最小元素互換,變成如下圖所示:

然后再將被刪除元素刪除:

我們下面所稱的被刪除元素,皆是指已經互換之后的被刪除元素。

加入顏色之后,被刪除元素和后繼元素互換只是值得互換,并不互換顏色,這個要注意。

下面開始講一下紅黑樹刪除的規則:

1、當被刪除元素為紅時,對五條性質沒有什么影響,直接刪除。

2、當被刪除元素為黑且為根節點時,直接刪除。

3、當被刪除元素為黑,且有一個右子節點為紅時,將右子節點涂黑放到被刪除元素的位置,如圖:

變成

4、當被刪除元素為黑,且兄弟節點為黑,兄弟節點兩個孩子也為黑,父節點為紅,此時,交換兄弟節點與父節點的顏色;NIL元素是指每個葉節點都有兩個空的,顏色為黑的NIL元素,需要他的時候就可以把它看成兩個黑元素,不需要的時候可以忽視他。

關注微信公眾號:Java技術棧,在后臺回復:數據結構,可以獲取我整理的 N 篇最新數據結構教程,都是干貨。

如圖:

變成:

5、當被刪除元素為黑、并且為父節點的左支,且兄弟顏色為黑,兄弟的右支為紅色,這個時候需要交換兄弟與父親的顏色,并把父親涂黑、兄弟的右支涂黑,并以父節點為中心左轉。如圖:

由:

變成:

6、當被刪除元素為黑、并且為父節點的左支,且兄弟顏色為黑,兄弟的左支為紅色,這個時候需要先把兄弟與兄弟的左子節點顏色互換,進行右轉,然后就變成了規則5一樣了,在按照規則5進行旋轉。如圖:

先兄弟與兄弟的左子節點顏色互換,進行右轉,變成:

然后在按照規則5進行旋轉,變成:

7、當被刪除元素為黑且為父元素的右支時,跟情況5.情況6 互為鏡像。

8、被刪除元素為黑且兄弟節點為黑,兄弟節點的孩子為黑,父親為黑,這個時候需要將兄弟節點變為紅,再把父親看做那個被刪除的元素(只是看做,實際上不刪除),看看父親符和哪一條刪除規則,進行處理變化如圖:

由:

變成:

9、當被刪除的元素為黑,且為父元素的左支,兄弟節點為紅色的時候,需要交換兄弟節點與父親結點的顏色,以父親結點進行左旋,就變成了情況4,在按照情況四進行操作即可,變化如下:

由:

交換兄弟節點與父親結點的顏色,以父親結點進行左旋 變成:

在按照情況四進行操作,變成:

好了,刪除的步驟也講完,沒有講到的一點就是,在添加刪除的時候,時刻要記得更改根元素的顏色為黑。

這里并沒有語言實現,只是講了一下紅黑樹的插入刪除步驟,你可以根據步驟自己把紅黑樹實現。

點擊這里,照著規則一步一步的構建一個紅黑樹吧。

最后

1、紅黑樹的實現其實是一個2、3、4樹,只是將雙節點或者三節點用紅色進行了標示,如果你將紅色節點放到和它父元素相同的高度,并把它和父元素看做是一個元素,你就會發現,變成了一個高度為lgN的二叉樹,這個2.3.4樹對紅黑樹很有啟發意義。

2、上面的步驟其實可以不用死記硬背,是可以推導出來的,因為我們是把一個平衡但通過插入或者刪除破壞了平衡的紅黑樹再次平衡,同過旋轉讓位,改變紅黑顏色,使之符合那五條基本性質。比如遇到刪除操作情況四的時候,我們可以把那個刪除元素去除,發現左邊比右邊少一個黑元素,這個時候,怎么辦,我們發現兄弟節點的子元素有一個紅元素,操作這個不會影響那五條性質,所以我們通過變換顏色,旋轉,即可讓左右兩邊的的黑色數目一樣。

3、旋轉操作的目的是出讓一個元素到另外的地方并且符合二叉樹左小右大的性質,交換顏色的目的是為了保持紅黑樹的那五條性質。

4、要時刻記得 ,一切的操作都是為了保持那五條性質。

最后的最后,其實還有一種更為簡單的紅黑二叉樹,這個簡單的紅黑二叉樹實際上是一個2.3樹,他只允許左節點為紅節點,但是性能上肯定是不如這個紅黑樹。這個簡單的紅黑二叉樹在《算法》第四版有介紹,掌握完之后再看這個簡單的紅黑二叉樹,就會覺著簡單 easy。

最后的最后的最后,一定要嘗試著自己推導一下插入刪除規則啊,不然經常忘,是睡一覺起來再看就有點懵逼的那種忘。

作者:Sun_TTTT

來源:csdn.net/sun_tttt/article/details/65445754

總結

以上是生活随笔為你收集整理的面试问红黑树,我脸都绿了。。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 岛国毛片在线观看 | 精品国产免费一区二区三区 | 日本高潮网站 | 91嫩草欧美久久久九九九 | 欧美 日韩 国产 中文 | 九九热精品 | 91蜜桃传媒精品久久久一区二区 | av在线视屏| 尤物网在线| 午夜精品一区二区三区在线播放 | 夜夜se| 热久久国产精品 | 国产淫片av片久久久久久 | 天天天色 | 日韩美女视频在线观看 | 久久99热人妻偷产国产 | 视频在线观看视频 | 亚洲好骚综合 | 黄色福利网站 | 夜夜骚网站 | 日韩亚洲一区二区三区 | 欧美日韩国产一区二区三区在线观看 | 日本中文在线观看 | 欧美日韩视频无码一区二区三 | 欧美成人免费观看视频 | 天天摸夜夜添 | 成人羞羞国产免费游戏 | 在线观看污污视频 | 中文字幕精品一区 | 夜夜添无码一区二区三区 | 操干视频| 色欧洲| 秋霞国产午夜精品免费视频 | 亚洲精品国产99 | 综合视频一区 | 欧美午夜理伦三级在线观看 | 亚洲一区二区三区四区在线观看 | 五月激情丁香网 | 色哟哟视频网站 | 欧美成人三级精品 | 亚洲色婷婷久久精品av蜜桃 | 国产色中色 | 极品美女销魂一区二区三区 | 欧美日韩在线国产 | 欧美一级黄色片子 | 亚洲精品第三页 | 多毛的亚洲人毛茸茸 | 亚洲精品18在线观看 | www.九色 | 国产女人视频 | 毛片在线视频 | 在线手机av | 夜夜小视频 | 在线免费观看亚洲视频 | 国产男女猛烈无遮挡免费视频 | 日日摸日日碰夜夜爽无码 | 国产剧情在线视频 | 狠狠干狠狠操 | 亚洲日本色 | 国产一级黄色大片 | 全国最大色 | 成人免费av网站 | 在线观看国产亚洲 | 亚洲精品乱码久久久久久自慰 | 性高跟丝袜xxxxhd | 999精品一区 | 狼人伊人干| 精品福利三区3d卡通动漫 | 51国产在线 | 色老板精品凹凸在线视频观看 | 日韩色综合| 日韩精品视频网 | 亚洲综合久久久 | 狠狠干2021 | 日本成人精品视频 | 日本网站黄色 | 少妇视频一区二区三区 | 国产欧美熟妇另类久久久 | 美女狂揉羞羞的视频 | 午夜美女在线 | 九九热在线视频观看 | 国产大片aaa | 欧美黄色片视频 | 国产自精品| 日韩中文字幕久久 | 青青青视频在线 | 亚洲精品视频观看 | 国产欧美日韩三级 | 欧美久久一区二区三区 | 人妻在线一区二区 | 久久亚洲av成人无码国产电影 | 免费成人黄 | 少妇大叫太粗太大爽一区二区 | 午夜精品一二三区 | 国产无套精品一区二区三区 | 91香草视频 | 免费在线观看日韩av | 中文字幕永久在线观看 | 天天碰免费视频 |