技術問答
技術文章
iT 徵才
聊天室
2026 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2024 iThome 鐵人賽
DAY
26
0
佛心分享-刷題不只是刷題
[30天LeetCode挑戰] 每天一點演算法,讓技巧融會貫通
系列 第
26
篇
[Day26] 2-3-4樹 筆記
16th鐵人賽
很懶欸
2024-10-10 18:04:48
677 瀏覽
分享至
2-3-4 樹筆記
基本定義
2-3-4 樹
是一種
自平衡多路搜尋樹(Balanced Multi-Way Search Tree)
,每個節點最多可以包含 2、3 或 4 個子節點,因此命名為 2-3-4 樹。
2-3-4 樹的節點有以下三種類型:
2-節點
:包含 1 個鍵與 2 個子節點。
3-節點
:包含 2 個鍵與 3 個子節點。
4-節點
:包含 3 個鍵與 4 個子節點。
鍵值大小順序規則
:
所有左子樹的鍵值小於父節點的第一個鍵值。
中間子樹的鍵值介於父節點的兩個鍵值之間。
右子樹的鍵值大於父節點的第二個鍵值。
特點
2-3-4 樹是一種
完全平衡樹
,所有葉節點在同一層,樹的高度盡量保持最低,以便在最壞情況下仍能保證
O(log n)
的操作效率。
與其他平衡樹相比,2-3-4 樹因其節點可以容納多個鍵值,所以在插入與刪除時,調整的次數比 AVL 樹或紅黑樹少。
操作時間複雜度
搜尋(Search)
:
O(log n)
插入(Insert)
:
O(log n)
刪除(Delete)
:
O(log n)
常見操作
插入(Insertion)
從根節點開始
:
若根節點是 4-節點,則先分裂根節點,將中間鍵值提升,然後繼續插入。
找到適當的子樹位置
:
按照鍵值大小找到合適的子樹進行遞迴搜索。
處理 4-節點
:
當遇到 4-節點時,將該節點進行分裂,將中間的鍵值提升到父節點(如果父節點也是 4-節點,則繼續分裂),將 4-節點分解為兩個 2-節點。
插入新鍵值
:
將新鍵值插入到合適的 2-節點或 3-節點中,保證節點內的鍵值順序正確。
刪除(Deletion)
找到要刪除的鍵值位置
:
若刪除的是葉節點的鍵值,直接刪除即可。
刪除內部節點的鍵值
:
用前驅或後繼鍵值替換要刪除的鍵值,然後在葉節點中刪除前驅或後繼鍵值。
處理 2-節點的鍵值不足
:
若刪除操作導致節點鍵值不足(2-節點變成 1-節點),則需要進行「鍵值借用」或「合併」操作。
鍵值借用
:從相鄰兄弟節點中借取一個鍵值,使當前節點成為 2-節點。
合併節點
:若兄弟節點是 2-節點,則將兄弟節點與父節點的鍵值合併,形成新的 3-節點或 4-節點。
節點分裂(Node Split)
當 4-節點插入新鍵值後無法容納更多的鍵值時,需要進行節點分裂:
將 4-節點中的中間鍵值提升到父節點。
4-節點分解為兩個 2-節點。
若父節點也是 4-節點,則繼續對父節點進行分裂,直到樹恢復平衡。
優缺點
優點
高度平衡
:所有葉節點都位於相同的深度,避免了退化成鏈表的情況。
操作簡單
:每個節點最多只有三個鍵值,可以有效地減少旋轉與調整次數。
穩定性高
:適合用於資料庫索引等需要大量查詢操作的場景。
缺點
節點需要儲存更多鍵值
:相較於二元搜尋樹,每個節點需要儲存更多鍵值與子節點指標,因此節點的記憶體消耗較大。
插入與刪除較為複雜
:當節點鍵值數過多時,可能需要進行多次分裂或合併操作。
使用場景
資料庫系統索引結構
:如 B 樹、B+ 樹等結構的基礎,用來提升資料庫查詢效能。
檔案系統管理
:用來建立檔案系統的層次結構,方便快速查找檔案或資料夾。
平衡樹管理
:適合用於鍵值數量較多且需要平衡操作的應用場景。
留言
追蹤
檢舉
上一篇
[Day25] 2-3樹 與 紅黑樹 筆記
下一篇
[Day27] 關於Heap的刷題筆記(1046)
系列文
[30天LeetCode挑戰] 每天一點演算法,讓技巧融會貫通
共
30
篇
目錄
RSS系列文
訂閱系列文
8
人訂閱
26
[Day26] 2-3-4樹 筆記
27
[Day27] 關於Heap的刷題筆記(1046)
28
[Day28] 2-3樹刷題筆記(701)
29
[Day29] LeetCode第938題 Range Sum of BST 刷題筆記
30
[Day30] LeetCode第1382題 Balance a Binary Search Tree 刷題筆記
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
902
組
團體組數
37
組
累計文章數
19834
篇
完賽人數
528
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
17th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
react
熱門問題
Outlook 被要求登入Microsoft 365
Windows 11 25H2 檔案網管網址列空白
想在AWS上面測試 Hping3這套工具
DC伺服器的「設定」打不開
熱門回答
Windows 11 25H2 檔案網管網址列空白
熱門文章
你跟 ChatGPT 講的每一句話,對方律師都可以 subpoena——2026 年美國判決讓你的「AI 私密對話」消失了
2026別再只會 Vibe Coding,今年你該學的是「牧羊人式」的代理開發
AI 記憶是假議題:真正該解決的是 Context Engineering
AI Code Reviewer 真的只值三萬嗎?
當訓練資料本身被污染:開發者必須知道的 AI 生成內容危機
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}