版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
紅黑樹的插入與刪除操作手冊一、紅黑樹概述
紅黑樹是一種自平衡的二叉搜索樹,通過維護(hù)節(jié)點(diǎn)的顏色屬性(紅色或黑色)和特定的性質(zhì),確保樹的高度保持在平衡狀態(tài),從而實(shí)現(xiàn)高效的插入和刪除操作。
(一)紅黑樹的基本性質(zhì)
1.每個節(jié)點(diǎn)要么是紅色,要么是黑色。
2.根節(jié)點(diǎn)是黑色。
3.每個葉子節(jié)點(diǎn)(NIL節(jié)點(diǎn))是黑色。
4.如果一個節(jié)點(diǎn)是紅色的,則它的兩個子節(jié)點(diǎn)都是黑色的(從每個葉子到根的所有路徑上不能有兩個連續(xù)的紅色節(jié)點(diǎn))。
5.從任一節(jié)點(diǎn)到其每個葉子的所有簡單路徑都包含相同數(shù)目的黑色節(jié)點(diǎn)。
二、紅黑樹的插入操作
(一)插入步驟
1.標(biāo)準(zhǔn)BST插入:按照二叉搜索樹的規(guī)則將節(jié)點(diǎn)插入到樹中。
2.更新顏色:新插入的節(jié)點(diǎn)默認(rèn)為紅色。
3.修復(fù)紅黑樹性質(zhì):通過旋轉(zhuǎn)和重新著色操作,確保樹滿足紅黑樹的性質(zhì)。
(二)修復(fù)操作
當(dāng)插入紅色節(jié)點(diǎn)后,可能破壞紅黑樹的性質(zhì),需要通過以下步驟修復(fù):
(1)情況1:叔叔節(jié)點(diǎn)是紅色
-將父節(jié)點(diǎn)和叔叔節(jié)點(diǎn)變?yōu)楹谏娓腹?jié)點(diǎn)變?yōu)榧t色。
-將當(dāng)前節(jié)點(diǎn)移動到祖父節(jié)點(diǎn),繼續(xù)修復(fù)。
(2)情況2:叔叔節(jié)點(diǎn)是黑色
-根據(jù)當(dāng)前節(jié)點(diǎn)與父節(jié)點(diǎn)的位置,分為左左、左右、右右、右左四種情況,通過旋轉(zhuǎn)和重新著色修復(fù)。
示例:插入節(jié)點(diǎn)15(假設(shè)樹已平衡),插入后路徑為10(黑)→15(紅),叔叔節(jié)點(diǎn)為空(黑色),屬于左右情況,需進(jìn)行左旋和著色修復(fù)。
三、紅黑樹的刪除操作
(一)刪除步驟
1.標(biāo)準(zhǔn)BST刪除:刪除節(jié)點(diǎn)時,考慮三種情況:
-刪除葉子節(jié)點(diǎn)。
-刪除一個子節(jié)點(diǎn)為葉子的節(jié)點(diǎn)。
-刪除兩個子節(jié)點(diǎn)都存在的節(jié)點(diǎn)(用后繼替換)。
2.修復(fù)顏色:刪除操作可能導(dǎo)致紅黑樹性質(zhì)被破壞,需通過旋轉(zhuǎn)和重新著色修復(fù)。
(二)修復(fù)操作
刪除操作可能導(dǎo)致兩種性質(zhì)被破壞:
(1)黑高度不匹配
-刪除黑色節(jié)點(diǎn)后,可能導(dǎo)致路徑上的黑高度減少,需通過“紅黑樹剪切”修復(fù)。
(2)紅節(jié)點(diǎn)相鄰
-如果刪除后相鄰節(jié)點(diǎn)為紅色,需通過旋轉(zhuǎn)和著色修復(fù)。
示例:刪除節(jié)點(diǎn)10(黑),導(dǎo)致其子路徑黑高度減少,需通過將子節(jié)點(diǎn)變?yōu)榧t色并旋轉(zhuǎn)修復(fù)。
四、總結(jié)
紅黑樹的插入和刪除操作通過維護(hù)樹的平衡和性質(zhì),確保操作的時間復(fù)雜度為O(logn)。修復(fù)操作需根據(jù)具體情況進(jìn)行旋轉(zhuǎn)和著色,但總體流程清晰且高效。掌握這些操作對于理解和應(yīng)用紅黑樹至關(guān)重要。
二、紅黑樹的插入操作(續(xù))
(二)修復(fù)操作(詳細(xì)步驟)
在插入節(jié)點(diǎn)后,若紅黑樹的性質(zhì)被破壞,需通過以下旋轉(zhuǎn)和著色操作進(jìn)行修復(fù)。修復(fù)過程通常從靠近根節(jié)點(diǎn)的最低違規(guī)路徑開始,并向上傳播至根節(jié)點(diǎn)。
1.叔叔節(jié)點(diǎn)是紅色(情況1)
當(dāng)插入紅色節(jié)點(diǎn)后,若其父節(jié)點(diǎn)為紅色且叔叔節(jié)點(diǎn)也為紅色,說明其祖父節(jié)點(diǎn)必然為黑色(否則已違反性質(zhì)4)。此時,可以通過以下步驟修復(fù):
(1)著色操作
-將當(dāng)前節(jié)點(diǎn)、父節(jié)點(diǎn)和叔叔節(jié)點(diǎn)均設(shè)置為黑色。
-將祖父節(jié)點(diǎn)設(shè)置為紅色。
(2)重新定位當(dāng)前節(jié)點(diǎn)
-將當(dāng)前節(jié)點(diǎn)移動到祖父節(jié)點(diǎn),因?yàn)樽娓腹?jié)點(diǎn)可能成為新的違規(guī)節(jié)點(diǎn)。
-繼續(xù)向上檢查,直到根節(jié)點(diǎn)或不再違反性質(zhì)為止。
2.叔叔節(jié)點(diǎn)是黑色(情況2)
當(dāng)叔叔節(jié)點(diǎn)為黑色時,需根據(jù)當(dāng)前節(jié)點(diǎn)與父節(jié)點(diǎn)的相對位置進(jìn)行不同操作。分為四種子情況:
(1)左左情況(LL)
當(dāng)前節(jié)點(diǎn)是紅色,父節(jié)點(diǎn)是紅色,叔叔節(jié)點(diǎn)是黑色,且當(dāng)前節(jié)點(diǎn)位于父節(jié)點(diǎn)的左側(cè)。
修復(fù)步驟:
(a)右旋祖父節(jié)點(diǎn)
-以祖父節(jié)點(diǎn)為軸,進(jìn)行右旋操作。
(b)重新著色
-將父節(jié)點(diǎn)設(shè)置為黑色。
-將祖父節(jié)點(diǎn)設(shè)置為紅色。
(2)左右情況(LR)
當(dāng)前節(jié)點(diǎn)是紅色,父節(jié)點(diǎn)是紅色,叔叔節(jié)點(diǎn)是黑色,且當(dāng)前節(jié)點(diǎn)位于父節(jié)點(diǎn)的右側(cè)。
修復(fù)步驟:
(a)左旋父節(jié)點(diǎn)
-以父節(jié)點(diǎn)為軸,進(jìn)行左旋操作。
(b)進(jìn)入左左情況
-旋轉(zhuǎn)后,當(dāng)前節(jié)點(diǎn)與父節(jié)點(diǎn)的關(guān)系變?yōu)樽笞笄闆r,可應(yīng)用LL情況的修復(fù)步驟。
(c)右旋祖父節(jié)點(diǎn)
-以祖父節(jié)點(diǎn)為軸,進(jìn)行右旋操作。
(d)重新著色
-將父節(jié)點(diǎn)設(shè)置為黑色。
-將祖父節(jié)點(diǎn)設(shè)置為紅色。
(3)右右情況(RR)
當(dāng)前節(jié)點(diǎn)是紅色,父節(jié)點(diǎn)是紅色,叔叔節(jié)點(diǎn)是黑色,且當(dāng)前節(jié)點(diǎn)位于父節(jié)點(diǎn)的右側(cè)。
修復(fù)步驟:
(a)左旋祖父節(jié)點(diǎn)
-以祖父節(jié)點(diǎn)為軸,進(jìn)行左旋操作。
(b)重新著色
-將父節(jié)點(diǎn)設(shè)置為黑色。
-將祖父節(jié)點(diǎn)設(shè)置為紅色。
(4)右左情況(RL)
當(dāng)前節(jié)點(diǎn)是紅色,父節(jié)點(diǎn)是紅色,叔叔節(jié)點(diǎn)是黑色,且當(dāng)前節(jié)點(diǎn)位于父節(jié)點(diǎn)的左側(cè)。
修復(fù)步驟:
(a)右旋父節(jié)點(diǎn)
-以父節(jié)點(diǎn)為軸,進(jìn)行右旋操作。
(b)進(jìn)入右右情況
-旋轉(zhuǎn)后,當(dāng)前節(jié)點(diǎn)與父節(jié)點(diǎn)的關(guān)系變?yōu)橛矣仪闆r,可應(yīng)用RR情況的修復(fù)步驟。
(c)左旋祖父節(jié)點(diǎn)
-以祖父節(jié)點(diǎn)為軸,進(jìn)行左旋操作。
(d)重新著色
-將父節(jié)點(diǎn)設(shè)置為黑色。
-將祖父節(jié)點(diǎn)設(shè)置為紅色。
示例:假設(shè)插入節(jié)點(diǎn)15,樹結(jié)構(gòu)如下:
10(B)
/\
5(B)20(R)
/\
17(R)25(B)
插入15后,路徑為10→20→17,若20和17均為紅色,則需修復(fù):
-20和17為紅色,10為黑色,叔叔節(jié)點(diǎn)為17(黑色),屬于左右情況(LR)。
-先左旋20,再右旋10,最后重新著色。
(三)插入后的最終狀態(tài)
修復(fù)完成后,紅黑樹的性質(zhì)應(yīng)完全恢復(fù):
1.所有節(jié)點(diǎn)為紅色或黑色。
2.根節(jié)點(diǎn)為黑色。
3.葉子節(jié)點(diǎn)為黑色。
4.紅色節(jié)點(diǎn)的子節(jié)點(diǎn)為黑色。
5.從任一節(jié)點(diǎn)到葉子的所有路徑包含相同數(shù)目的黑色節(jié)點(diǎn)。
三、紅黑樹的刪除操作(續(xù))
(一)刪除步驟(詳細(xì)情況)
紅黑樹的刪除操作分為三種情況,需根據(jù)目標(biāo)節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)量進(jìn)行處理。
1.刪除葉子節(jié)點(diǎn)
若刪除的節(jié)點(diǎn)為葉子節(jié)點(diǎn)(無子節(jié)點(diǎn)),直接將其替換為NIL節(jié)點(diǎn)(黑色),可能引發(fā)黑高度問題,需后續(xù)修復(fù)。
2.刪除一個子節(jié)點(diǎn)的節(jié)點(diǎn)
若刪除的節(jié)點(diǎn)有一個子節(jié)點(diǎn),用其子節(jié)點(diǎn)替換該節(jié)點(diǎn),并刪除原子節(jié)點(diǎn)。此操作可能破壞性質(zhì)5(黑高度),需修復(fù)。
3.刪除兩個子節(jié)點(diǎn)的節(jié)點(diǎn)
若刪除的節(jié)點(diǎn)有兩個子節(jié)點(diǎn),用其后繼節(jié)點(diǎn)替換該節(jié)點(diǎn),并刪除后繼節(jié)點(diǎn)。后繼節(jié)點(diǎn)必然為單個子節(jié)點(diǎn)或葉子節(jié)點(diǎn),可轉(zhuǎn)化為前兩種情況處理。
(二)修復(fù)操作(詳細(xì)步驟)
刪除操作可能導(dǎo)致兩種主要問題:黑高度不匹配和紅節(jié)點(diǎn)相鄰。
1.黑高度不匹配(修復(fù)方法:紅黑樹剪切)
當(dāng)刪除黑色節(jié)點(diǎn)后,部分路徑的黑高度減少,需通過以下步驟修復(fù):
(1)引入“紅色鏈接”
-在黑高度減少的路徑上,將NIL節(jié)點(diǎn)臨時設(shè)為紅色,形成“紅色鏈接”。
-紅色鏈接相當(dāng)于將黑高度“借出”,使路徑黑高度恢復(fù)一致。
(2)處理紅色鏈接
根據(jù)紅色鏈接的位置,分為以下情況:
(a)紅色鏈接在祖父節(jié)點(diǎn)
-若紅色鏈接位于祖父節(jié)點(diǎn),直接刪除紅色鏈接(即恢復(fù)NIL節(jié)點(diǎn)為黑色),問題解決。
(b)紅色鏈接在父節(jié)點(diǎn)或當(dāng)前節(jié)點(diǎn)
-通過旋轉(zhuǎn)和著色操作,將紅色鏈接向上傳播或消除。
-具體操作類似插入修復(fù)中的旋轉(zhuǎn)和著色步驟。
示例:刪除節(jié)點(diǎn)10(黑),路徑為10→15→20,若15為紅色,需引入紅色鏈接(將20設(shè)為紅色),然后處理紅色鏈接。
2.紅節(jié)點(diǎn)相鄰(修復(fù)方法:旋轉(zhuǎn)和著色)
若刪除操作導(dǎo)致相鄰節(jié)點(diǎn)為紅色,需通過旋轉(zhuǎn)和著色修復(fù):
(1)左旋或右旋操作
-根據(jù)相鄰節(jié)點(diǎn)的位置,選擇合適的旋轉(zhuǎn)操作,使紅節(jié)點(diǎn)分離。
(2)重新著色
-將部分節(jié)點(diǎn)設(shè)置為黑色,避免連續(xù)紅色節(jié)點(diǎn)。
示例:刪除節(jié)點(diǎn)10(黑),路徑為10→15→20(紅),若15變?yōu)榧t色,可左旋15,使20變?yōu)楹谏?,并重新著色?/p>
(三)刪除后的最終狀態(tài)
修復(fù)完成后,紅黑樹的性質(zhì)應(yīng)完全恢復(fù),且滿足以下條件:
1.所有節(jié)點(diǎn)為紅色或黑色。
2.根節(jié)點(diǎn)為黑色。
3.葉子節(jié)點(diǎn)為黑色。
4.紅色節(jié)點(diǎn)的子節(jié)點(diǎn)為黑色。
5.從任一節(jié)點(diǎn)到葉子的所有路徑包含相同數(shù)目的黑色節(jié)點(diǎn)。
四、紅黑樹操作的應(yīng)用場景
紅黑樹的高效性和平衡性使其適用于以下場景:
(1)數(shù)據(jù)庫索引
-紅黑樹用于實(shí)現(xiàn)B樹索引,確保查詢效率。
(2)緩存淘汰算法
-LRU(最近最少使用)緩存可基于紅黑樹實(shí)現(xiàn)。
(3)編譯器符號表
-用于快速插入、刪除和查找標(biāo)識符。
(4)通用搜索樹
-在需要動態(tài)數(shù)據(jù)集合的場景中廣泛應(yīng)用。
一、紅黑樹概述
紅黑樹是一種自平衡的二叉搜索樹,通過維護(hù)節(jié)點(diǎn)的顏色屬性(紅色或黑色)和特定的性質(zhì),確保樹的高度保持在平衡狀態(tài),從而實(shí)現(xiàn)高效的插入和刪除操作。
(一)紅黑樹的基本性質(zhì)
1.每個節(jié)點(diǎn)要么是紅色,要么是黑色。
2.根節(jié)點(diǎn)是黑色。
3.每個葉子節(jié)點(diǎn)(NIL節(jié)點(diǎn))是黑色。
4.如果一個節(jié)點(diǎn)是紅色的,則它的兩個子節(jié)點(diǎn)都是黑色的(從每個葉子到根的所有路徑上不能有兩個連續(xù)的紅色節(jié)點(diǎn))。
5.從任一節(jié)點(diǎn)到其每個葉子的所有簡單路徑都包含相同數(shù)目的黑色節(jié)點(diǎn)。
二、紅黑樹的插入操作
(一)插入步驟
1.標(biāo)準(zhǔn)BST插入:按照二叉搜索樹的規(guī)則將節(jié)點(diǎn)插入到樹中。
2.更新顏色:新插入的節(jié)點(diǎn)默認(rèn)為紅色。
3.修復(fù)紅黑樹性質(zhì):通過旋轉(zhuǎn)和重新著色操作,確保樹滿足紅黑樹的性質(zhì)。
(二)修復(fù)操作
當(dāng)插入紅色節(jié)點(diǎn)后,可能破壞紅黑樹的性質(zhì),需要通過以下步驟修復(fù):
(1)情況1:叔叔節(jié)點(diǎn)是紅色
-將父節(jié)點(diǎn)和叔叔節(jié)點(diǎn)變?yōu)楹谏?,祖父?jié)點(diǎn)變?yōu)榧t色。
-將當(dāng)前節(jié)點(diǎn)移動到祖父節(jié)點(diǎn),繼續(xù)修復(fù)。
(2)情況2:叔叔節(jié)點(diǎn)是黑色
-根據(jù)當(dāng)前節(jié)點(diǎn)與父節(jié)點(diǎn)的位置,分為左左、左右、右右、右左四種情況,通過旋轉(zhuǎn)和重新著色修復(fù)。
示例:插入節(jié)點(diǎn)15(假設(shè)樹已平衡),插入后路徑為10(黑)→15(紅),叔叔節(jié)點(diǎn)為空(黑色),屬于左右情況,需進(jìn)行左旋和著色修復(fù)。
三、紅黑樹的刪除操作
(一)刪除步驟
1.標(biāo)準(zhǔn)BST刪除:刪除節(jié)點(diǎn)時,考慮三種情況:
-刪除葉子節(jié)點(diǎn)。
-刪除一個子節(jié)點(diǎn)為葉子的節(jié)點(diǎn)。
-刪除兩個子節(jié)點(diǎn)都存在的節(jié)點(diǎn)(用后繼替換)。
2.修復(fù)顏色:刪除操作可能導(dǎo)致紅黑樹性質(zhì)被破壞,需通過旋轉(zhuǎn)和重新著色修復(fù)。
(二)修復(fù)操作
刪除操作可能導(dǎo)致兩種性質(zhì)被破壞:
(1)黑高度不匹配
-刪除黑色節(jié)點(diǎn)后,可能導(dǎo)致路徑上的黑高度減少,需通過“紅黑樹剪切”修復(fù)。
(2)紅節(jié)點(diǎn)相鄰
-如果刪除后相鄰節(jié)點(diǎn)為紅色,需通過旋轉(zhuǎn)和著色修復(fù)。
示例:刪除節(jié)點(diǎn)10(黑),導(dǎo)致其子路徑黑高度減少,需通過將子節(jié)點(diǎn)變?yōu)榧t色并旋轉(zhuǎn)修復(fù)。
四、總結(jié)
紅黑樹的插入和刪除操作通過維護(hù)樹的平衡和性質(zhì),確保操作的時間復(fù)雜度為O(logn)。修復(fù)操作需根據(jù)具體情況進(jìn)行旋轉(zhuǎn)和著色,但總體流程清晰且高效。掌握這些操作對于理解和應(yīng)用紅黑樹至關(guān)重要。
二、紅黑樹的插入操作(續(xù))
(二)修復(fù)操作(詳細(xì)步驟)
在插入節(jié)點(diǎn)后,若紅黑樹的性質(zhì)被破壞,需通過以下旋轉(zhuǎn)和著色操作進(jìn)行修復(fù)。修復(fù)過程通常從靠近根節(jié)點(diǎn)的最低違規(guī)路徑開始,并向上傳播至根節(jié)點(diǎn)。
1.叔叔節(jié)點(diǎn)是紅色(情況1)
當(dāng)插入紅色節(jié)點(diǎn)后,若其父節(jié)點(diǎn)為紅色且叔叔節(jié)點(diǎn)也為紅色,說明其祖父節(jié)點(diǎn)必然為黑色(否則已違反性質(zhì)4)。此時,可以通過以下步驟修復(fù):
(1)著色操作
-將當(dāng)前節(jié)點(diǎn)、父節(jié)點(diǎn)和叔叔節(jié)點(diǎn)均設(shè)置為黑色。
-將祖父節(jié)點(diǎn)設(shè)置為紅色。
(2)重新定位當(dāng)前節(jié)點(diǎn)
-將當(dāng)前節(jié)點(diǎn)移動到祖父節(jié)點(diǎn),因?yàn)樽娓腹?jié)點(diǎn)可能成為新的違規(guī)節(jié)點(diǎn)。
-繼續(xù)向上檢查,直到根節(jié)點(diǎn)或不再違反性質(zhì)為止。
2.叔叔節(jié)點(diǎn)是黑色(情況2)
當(dāng)叔叔節(jié)點(diǎn)為黑色時,需根據(jù)當(dāng)前節(jié)點(diǎn)與父節(jié)點(diǎn)的相對位置進(jìn)行不同操作。分為四種子情況:
(1)左左情況(LL)
當(dāng)前節(jié)點(diǎn)是紅色,父節(jié)點(diǎn)是紅色,叔叔節(jié)點(diǎn)是黑色,且當(dāng)前節(jié)點(diǎn)位于父節(jié)點(diǎn)的左側(cè)。
修復(fù)步驟:
(a)右旋祖父節(jié)點(diǎn)
-以祖父節(jié)點(diǎn)為軸,進(jìn)行右旋操作。
(b)重新著色
-將父節(jié)點(diǎn)設(shè)置為黑色。
-將祖父節(jié)點(diǎn)設(shè)置為紅色。
(2)左右情況(LR)
當(dāng)前節(jié)點(diǎn)是紅色,父節(jié)點(diǎn)是紅色,叔叔節(jié)點(diǎn)是黑色,且當(dāng)前節(jié)點(diǎn)位于父節(jié)點(diǎn)的右側(cè)。
修復(fù)步驟:
(a)左旋父節(jié)點(diǎn)
-以父節(jié)點(diǎn)為軸,進(jìn)行左旋操作。
(b)進(jìn)入左左情況
-旋轉(zhuǎn)后,當(dāng)前節(jié)點(diǎn)與父節(jié)點(diǎn)的關(guān)系變?yōu)樽笞笄闆r,可應(yīng)用LL情況的修復(fù)步驟。
(c)右旋祖父節(jié)點(diǎn)
-以祖父節(jié)點(diǎn)為軸,進(jìn)行右旋操作。
(d)重新著色
-將父節(jié)點(diǎn)設(shè)置為黑色。
-將祖父節(jié)點(diǎn)設(shè)置為紅色。
(3)右右情況(RR)
當(dāng)前節(jié)點(diǎn)是紅色,父節(jié)點(diǎn)是紅色,叔叔節(jié)點(diǎn)是黑色,且當(dāng)前節(jié)點(diǎn)位于父節(jié)點(diǎn)的右側(cè)。
修復(fù)步驟:
(a)左旋祖父節(jié)點(diǎn)
-以祖父節(jié)點(diǎn)為軸,進(jìn)行左旋操作。
(b)重新著色
-將父節(jié)點(diǎn)設(shè)置為黑色。
-將祖父節(jié)點(diǎn)設(shè)置為紅色。
(4)右左情況(RL)
當(dāng)前節(jié)點(diǎn)是紅色,父節(jié)點(diǎn)是紅色,叔叔節(jié)點(diǎn)是黑色,且當(dāng)前節(jié)點(diǎn)位于父節(jié)點(diǎn)的左側(cè)。
修復(fù)步驟:
(a)右旋父節(jié)點(diǎn)
-以父節(jié)點(diǎn)為軸,進(jìn)行右旋操作。
(b)進(jìn)入右右情況
-旋轉(zhuǎn)后,當(dāng)前節(jié)點(diǎn)與父節(jié)點(diǎn)的關(guān)系變?yōu)橛矣仪闆r,可應(yīng)用RR情況的修復(fù)步驟。
(c)左旋祖父節(jié)點(diǎn)
-以祖父節(jié)點(diǎn)為軸,進(jìn)行左旋操作。
(d)重新著色
-將父節(jié)點(diǎn)設(shè)置為黑色。
-將祖父節(jié)點(diǎn)設(shè)置為紅色。
示例:假設(shè)插入節(jié)點(diǎn)15,樹結(jié)構(gòu)如下:
10(B)
/\
5(B)20(R)
/\
17(R)25(B)
插入15后,路徑為10→20→17,若20和17均為紅色,則需修復(fù):
-20和17為紅色,10為黑色,叔叔節(jié)點(diǎn)為17(黑色),屬于左右情況(LR)。
-先左旋20,再右旋10,最后重新著色。
(三)插入后的最終狀態(tài)
修復(fù)完成后,紅黑樹的性質(zhì)應(yīng)完全恢復(fù):
1.所有節(jié)點(diǎn)為紅色或黑色。
2.根節(jié)點(diǎn)為黑色。
3.葉子節(jié)點(diǎn)為黑色。
4.紅色節(jié)點(diǎn)的子節(jié)點(diǎn)為黑色。
5.從任一節(jié)點(diǎn)到葉子的所有路徑包含相同數(shù)目的黑色節(jié)點(diǎn)。
三、紅黑樹的刪除操作(續(xù))
(一)刪除步驟(詳細(xì)情況)
紅黑樹的刪除操作分為三種情況,需根據(jù)目標(biāo)節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)量進(jìn)行處理。
1.刪除葉子節(jié)點(diǎn)
若刪除的節(jié)點(diǎn)為葉子節(jié)點(diǎn)(無子節(jié)點(diǎn)),直接將其替換為NIL節(jié)點(diǎn)(黑色),可能引發(fā)黑高度問題,需后續(xù)修復(fù)。
2.刪除一個子節(jié)點(diǎn)的節(jié)點(diǎn)
若刪除的節(jié)點(diǎn)有一個子節(jié)點(diǎn),用其子節(jié)點(diǎn)替換該節(jié)點(diǎn),并刪除原子節(jié)點(diǎn)。此操作可能破壞性質(zhì)5(黑高度),需修復(fù)。
3.刪除兩個子節(jié)點(diǎn)的節(jié)點(diǎn)
若刪除的節(jié)點(diǎn)有兩個子節(jié)點(diǎn),用其后繼節(jié)點(diǎn)替換該節(jié)點(diǎn),并刪除后繼節(jié)點(diǎn)。后繼節(jié)點(diǎn)必然為單個子節(jié)點(diǎn)或葉子節(jié)點(diǎn),可轉(zhuǎn)化為前兩種情況處理。
(二)修復(fù)操作(詳細(xì)步驟)
刪除操作可能導(dǎo)致兩種主要問題:黑高度不匹配和紅節(jié)點(diǎn)相鄰。
1.黑高度不匹配(修復(fù)方法:紅黑樹剪切)
當(dāng)刪除黑色節(jié)點(diǎn)后,部分路徑的黑高度減少,需通過以下步驟修復(fù):
(1)引入“紅色鏈接”
-在黑高度減少的路徑上,將NIL節(jié)點(diǎn)臨時設(shè)為紅色,形成“紅色鏈接”。
-紅色鏈接相當(dāng)于將黑高度“借出”,使路徑黑高度恢復(fù)一致
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州省貴陽市普通中學(xué)2025-2026學(xué)年高一上學(xué)期期末語文試題(含答案)
- 中學(xué)教學(xué)質(zhì)量分析與改進(jìn)制度
- 養(yǎng)老院無障礙設(shè)施管理使用制度
- 養(yǎng)老院安全管理規(guī)定制度
- 企業(yè)內(nèi)部培訓(xùn)與發(fā)展規(guī)劃制度
- 老年糖尿病患者的藥物相互作用用藥依從性研究
- 玻璃熔化工變革管理能力考核試卷含答案
- 我國上市公司環(huán)境會計信息披露:現(xiàn)狀、影響因素與提升路徑
- 我國上市公司控制權(quán)轉(zhuǎn)移與公司績效關(guān)系:基于多維度視角的深度剖析
- 我國上市公司審計風(fēng)險與審計定價的內(nèi)在關(guān)聯(lián)及實(shí)證探究
- 2026年無錫工藝職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試題庫帶答案解析
- 2025年公務(wù)員多省聯(lián)考《申論》題(陜西A卷)及參考答案
- 年終尾牙會領(lǐng)導(dǎo)講話稿
- 《頭暈與眩暈診斷》課件
- 2022年江蘇職教高考市場營銷試卷
- 計量器具-GRR分析表格
- 向規(guī)范要50分規(guī)范答題主題班會-課件
- cie1931年標(biāo)準(zhǔn)色度觀測者的光譜色品坐標(biāo)
- per200軟件petrel2009中文版教程
- SB/T 10595-2011清潔行業(yè)經(jīng)營服務(wù)規(guī)范
- JJF 1078-2002光學(xué)測角比較儀校準(zhǔn)規(guī)范
評論
0/150
提交評論