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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

用table展示树形结构数据_复习一下数据结构(二)——2.2 树形索引(23树)

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用table展示树形结构数据_复习一下数据结构(二)——2.2 树形索引(23树) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????????普通樹一個結點可以有多個孩子,但它本身只能存儲一個元素,而二叉樹結點最多只能有兩個,這對于元素非常多的時候,會使得樹的度或者是高度會非常大。這就使得內存存取外存的次數會增多,一旦涉及到外部存儲設備,時間復雜度的計算就會受到影響,所以為了降低對外存設備的訪問次數,就引入了一個叫多路查找樹(mutil-way search tree)的數據結構。

????????多路查找樹,其每一個結點的孩子數可以多于兩個,且每一個結點可以存儲多個元素。多路查找樹有查找的性質,所以,所有元素之間又存在著特定的排序關系。多路查找樹的4種特殊形式:2-3樹、2-3-4樹、B樹和B+樹

? ? ? ? 最開始說說最簡單的B樹,2-3樹

????????1.1 概念

????????2-3樹其中的每個非葉子結點都具有兩個孩子(2結點)或三個孩子(3結點)。高度為h的2-3樹結點數至少有2^h - 1個。

????????2結點包含一個元素S和兩個孩子(或沒有孩子)。元素S大于左子樹包含的元素,小于右子樹包含的元素。

????????3結點包含兩個元素S和L以及三個孩子(或沒有孩子)。元素S大于左子樹包含的元素且小于中間子樹包含的元素,元素L大于中間子樹包含的元素小于右子樹包含的元素。

????????且所有葉子結點都在同一層次。

????????1.2 操作2-3樹

????????1.2.1 查找元素

????????2-3樹的查找方式與二叉樹類似,根據元素與結點的大小比對決定后續路線。如上圖,我需要找個10,首先2結點10 > 8,往右子樹找;下一結點包含兩個元素,為3結點,10 < 12,往左子樹找;左子樹中比較查找得到10。

????????1.2.2 插入

????????2-3樹的插入操作與二叉樹相同,插入操作一定是發生在葉子節點上。

????????1)對于一個空樹來說,插入一個2結點即可

??????? 2)插入結點到一個2結點的葉子上,由于其本身就一個元素,所以只需要將其變成3結點即可。

????????如上圖,我希望插入一個元素3,根據遍歷,3 < 8,3 < 4,于是考慮插入到葉子結點1所在位置,3 > 1,于是3在1的右邊兒。

??????? 3)往3結點插入一個新元素,就需要將其拆分,且將樹中兩元素或插入元素的三者中選擇其一向上移動一層。

????????來看看第一種情況,插入的元素是5,被插入的結點是(6,7),是一個3結點,當父節點是2節點,這時候考慮將567其中一人升一級,4 < 5 < 6, 5 < 6 < 7,將6提上一層,讓父節點變為3節點,5插入變成中間子樹,剩下一個7為右子樹

????????另一種情況,插入的元素是11,11 < 12,顯然,11應該插入到3節點(9,10)中,但(9,10)節點不能再插入元素了,于是考慮將11插入到(12,14)節點中,這時候8 < 11 < 12,所以,將12向上提一層,這時候,原來的擁有8元素的2結點變為了3結點,剩下的11,9,10需要考慮將他們變為中子樹

????????1.2.3 刪除

??????? 1)所刪除的元素位于3結點的葉子結點上直接刪除即可。因為3結點中肯定是包含兩個元素的,直接刪除也不會影響到2-3樹的結構變化。如圖,我想要把元素9刪除,那么我直接剔除元素9即可

??????? 2)刪除的元素位于2結點上,即刪除的是只有一個元素的結點,相當于對結點進行刪除操作。這個時候如果直接把結點刪除,便會不符合2-3樹的定義(無子結點或必須擁有N個子節點)。如,我想要刪除元素1,結點4本來是擁有子結點1與子結點6,7的,此時少了結點1,便不符合2-3樹的定義了。

????????于是,對于刪除的元素處于2結點的位置時候,需要分四種情況考慮:

????????第一種,結點雙親也是2結點,且擁有一個3結點的孩子,正如上圖,那么這時候只需要左旋,將6元素提上一層即可

????????第二種,結點的雙親是2結點,右孩子也是2結點。這個時候就不能像上一種情況那樣直接左旋,這樣會造成新的樹形沒有右孩子,因此需要對整棵樹進行變形,來讓擁有7元素的這個結點變為3結點。比如,我刪除了一個元素4的結點。這個時候需要讓8加入到元素7的結點中,然后讓右子樹最小的一位元素9到頂層最后左旋即可。

????????情形三,此節點的雙親是一個3結點。比如說我刪除一個元素10,這個時候只需要將3結點的小元素降下來,然后與中子樹的合為一個3結點即可。

????????情形四,當前的2-3樹為一個滿二叉樹,這個時候,刪除任何一個葉子都需要讓整棵樹變形。我從下圖中刪除一個8元素的結點,這個時候9肯定不能單獨作為一個2結點存在了,考慮到2-3樹的性質,6與7合為一個3結點,放左子樹,14提上一層,13當做一個中子樹,15作為一個右子樹

總結

以上是生活随笔為你收集整理的用table展示树形结构数据_复习一下数据结构(二)——2.2 树形索引(23树)的全部內容,希望文章能夠幫你解決所遇到的問題。

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