1. 程式人生 > >《 常見演算法與資料結構》平衡查詢樹(1)—— 2-3查詢樹(附動畫)

《 常見演算法與資料結構》平衡查詢樹(1)—— 2-3查詢樹(附動畫)

本系列文章主要介紹常用的演算法和資料結構的知識,記錄的是《Algorithms I/II》課程的內容,採用的是“演算法(第4版)”這本紅寶書作為學習教材的,語言是java。這本書的名氣我不用多說吧?豆瓣評分9.4,我自己也認為是極好的學習演算法的書籍。

通過這系列文章,可以加深對資料結構和基本演算法的理解(個人認為比學校講的清晰多了),並加深對java的理解。

2-3樹介紹

我們上回說到二叉查詢樹已經很接近我們的目標了,在很多情況下效能都很不錯,但是唯獨在刪除上不行,一旦刪除操作做多了就會失去平衡,那麼,這回,我們來說說如何做一個平衡查詢樹,首先介紹一下2-3查詢樹

2-3樹是一種特殊的二叉樹,它允許一個節點中出現2個key。

  • 2節點:1個key,2個孩子

  • 3節點,2個key,3個孩子

your text

它有幾個特性:

  1. 符合中序遍歷的順序:左孩小於最左key,中間孩子在左右key之間,右孩子大於最右key

  2. 絕對平衡:從根節點到所有null節點的路徑一樣長(我們後面會講如何維護)

2-3樹查詢

根據它的特性,我們可以很容易知道如何查詢,和二叉樹的查詢差不多,只是多了一個節點。

  • 如果小於左孩子:go left

  • 如果小於右孩子:go mid

  • 如果大於右孩子:go right

  • 如果等於key,返回value

  • 如果為null,返回null

看動畫:

your text

2-3樹的插入

插入分幾種情況:

  • 如果插入的節點是一個2-節點:直接把2節點變成3節點

your text

  • 如果插入的是一個3-節點:

    • 把key加入3-節點變成一個臨時4-節點

    • 把4節點的中間key上移到父親節點

    • 重複操作。

    • 如果到達了root,形成了一個臨時4節點,則root節點分裂成3個節點,樹高增加1層

your text

your text

看動畫:

your text

構造動畫

講了這麼多,我們就來看看如何構造一棵2-3樹吧。

your text

實現方案

這裡就先賣個關子,這裡不寫程式碼實現,大家先了解下,後面會用紅黑樹的方案實現2-3樹