程序員的內功心法-234樹

直面弱點,奮發圖強!!!
複製代碼

引言

紅黑樹、B樹、B+樹,都是軟件開發中一個比較難理解和掌握的知識點。他們的本質依然是平衡二叉搜索樹。若是直接去學習紅黑樹、B樹、B+樹的知識點,無異於霧裏看花。此次咱們從這些數據結構的底層邏輯設計出發,不牽扯任何代碼層面上的內容。javascript

二三四樹

定義

  • 二節點java

  • 一個key和左右兩個連接;其中key大於左連接、小於右連接程序員

  • 三節點markdown

  • 包含兩個key和三個連接(兩個key分別稱爲key1和key2,key1小於key2)數據結構

  • 一、二、3三個子連接(子連接1的key小於根結點key一、子連接2的key大於根結點key1且小於根結點key二、子連接3的key大於根結點key2)oop

  • 四節點學習

  • 包含三個key和四個子連接(三個key分別爲key一、key二、key3且從小到大排列)spa

  • 一、二、三、4三個子連接(子連接1的key小於根結點key一、子連接2的key大於根結點key1且小於根結點key二、子連接3的key大於根結點key2且小於根結點key三、子連接4的key大於根結點key3)設計

  • 上述的節點計數指子連接的數量,而非節點包含的key的數量3d

操做

因爲二、三、4樹的查詢操做和二叉搜索樹的操做一致,再也不贅敘。本次主要完成插入和刪除的操做描述

能夠參考以前的文章,熟悉二叉樹一些基本定義和操做

二叉搜索樹(BST)

平衡二叉樹(AVL)

插入

咱們把1-10的數字拆入到一棵234樹中

依次插入一、二、3節點

插入4節點,須要將4節點分裂成3個2節點的操做

至此,插入邏輯介紹完畢

刪除

節點的刪除邏輯,和二叉樹的刪除邏輯區別不大。若是是葉子節點,能夠直接刪除;若是是非葉子節點,須要轉換爲後繼/前驅節點的刪除方式,全部均可以轉換爲極值的刪除

非2節點的刪除

2節點的刪刪除

對於2節點的刪除,須要轉換爲三、4節點中節點的刪除

父節點爲非2節點,兄弟節點是2節點

父節點是非2節點,兄弟節點是非2節點

父節點是2節點,兄弟節點非2節點

父節點是2節點,兄弟節點也是2節點

至此,咱們的234樹的插入和刪除操做介紹完了。搞清楚234樹的插入和刪除操做將是後續紅黑樹、B樹、B+樹的前置條件。

目前正在整理紅黑樹、B樹、B+樹的內容,敬請期待。同時也歡迎你們分享轉發!

系列

《程序員內功心法——搜索二叉樹》

《程序員內功心法——AVL樹》

《程序員內功心法——234樹》

歡迎你們關注javascript藝術,留言分享和我交流!

相關文章
相關標籤/搜索