資料結構:2-3樹與紅黑樹
2-3樹之前沒接觸過,只是聽說過紅黑樹,知道是平衡樹的一種,在關注C++的STL裡的set和map底層實現原理時第一次知道的,查了一下紅黑樹的資料,看的一通雲裡霧罩、不明所以。正好最近一個演算法微信公眾號裡看了幾篇講資料結構的文章,先講了2-3樹,後講了紅黑樹,一下子就明白了。
原來紅黑樹是2-3樹德一種實現方式,2-3樹是平衡樹的一種概念和思路,目的是降低BST(平衡查詢樹)的插入後平衡化操作代價,但2-3樹直接實現起來比較複雜,需要處理不同的節點型別,相比AVL查詢樹,2-3樹多了一種節點型別,它有兩個value和3個子女指標,子女指標指向由兩個value分開的3個區間,然後定義一些列平衡化操作,使得在插入、刪除時效率相比AVL樹要高(只需修改和本節點相關的節點即可,而AVL要遞迴平衡化操作,在一些情況下可能會一直涉及到根節點)。
但2-3樹插入操作造成的多次比較、拆分等也比較複雜,平衡操作有時會降低效率,作為改進的紅黑樹效率較高而且實現難度降低了很多。
分享一下這兩篇文章,注意其程式碼實現是C#,沒有指標哦。
2-3樹
紅黑樹
相關推薦
資料結構:2-3樹與紅黑樹
2-3樹之前沒接觸過,只是聽說過紅黑樹,知道是平衡樹的一種,在關注C++的STL裡的set和map底層實現原理時第一次知道的,查了一下紅黑樹的資料,看的一通雲裡霧罩、不明所以。正好最近一個演算法微信公
資料結構——2-3-4樹與紅黑樹
2-3-4樹與紅黑樹 2-3-4樹 前面講到了2-3樹,2-3樹是允許節點最多有三個子節點的樹,2-3樹中有2節點和3節點,2節點跟普通的二叉樹節點一樣,3節點AB就是的左子樹上的所有節點的值小於A,中子樹上
經典搜尋演算法之2-3-4樹與紅黑樹
1.2-3-4樹 在筆者上篇文章中,介紹了B樹和B+樹,這裡我所說的2-3-4樹就是階為4的B樹。根據離散數學的圖論相關知識,可以證明2-3-4樹和紅黑樹是等價的。對於m階(m指的結點的最大分支數)B樹,其結點的值的個數n:1<=n<m。因此,對於2-3
二叉樹與紅黑樹的java實現
二叉樹的java實現 public class BinaryTree { /** * 根節點 */ private static Node root; static class Node { int key; Node l
B樹、B-樹、B+樹與紅黑樹
參考 二叉查詢樹(BST): 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; (2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; (3)左、右子樹也分別為二叉排序
B樹(B-樹)與B+樹與紅黑樹
B樹是為實現高效的磁碟存取而設計的多叉平衡搜尋樹。這個概念在檔案系統,資料庫系統中非常重要。當然,有關於B樹的產生,發展,結構等等方面的介紹已經非常詳細,所以本文只是介紹有關於B樹和B+樹最核心的知識點,也算是我本人的學習筆記。至於詳細的資料,因為畢竟有著太多,所以不再贅述。
二叉查詢樹與紅黑樹概念性質及操作時間複雜度
操作名(h樹高) 二叉查詢數 紅黑樹 查詢 O(h) O(lgn) 查最大/小元素 O(h) O(lgn) 前驅/後繼 O(h) O(lgn) 插入 O(h) O(lgn) 刪除 O(h) O(lgn)
4階b樹與紅黑樹
任何一棵紅黑樹都對應一棵4階b樹,一棵4階b樹所對應的紅黑樹可能有多棵,但大同小異。 直接記憶紅黑樹的插入刪除很困難,而4階b樹的插入刪除操作對應紅黑樹的旋轉與變色,所以每做一步,寫出對應的4階b樹,操作完後,再變換回紅黑樹,十分好理解。 需要注意以下幾個問題: 1
資料結構 3 二叉查詢樹、紅黑樹、旋轉與變色 理解與使用
這裡再來複習一下二叉樹的概念: 1. 每個節點下子元素不可超過兩個,必須是0個或者一個或則兩個 2. 二叉樹是一種有序樹。 理解了這些,我們這節要學習的內容就是有關於二叉查詢樹以及有關紅黑樹。 ## 二叉查詢樹 從這個名字,可以簡單理解一下,他是為了解決什麼被髮明出來的。當然是查找了。因為名字自帶查
資料結構之2-3-4樹
1. 2-3-4樹是什麼 在二叉樹中,每個節點有一個數據項,最多有兩個子節點。如果允許每個節點可以有更多的資料項和更多的子節點,就是多叉樹(multiway tree)。 2-3-4樹就是一種階為4的多叉樹,它像紅黑樹一樣是平衡樹,可以保證在O(lgn)的時間內完成查詢、插入和刪除操
從2-3-4樹到紅黑樹(下) Java與C的實現
歡迎探討,如有錯誤敬請指正 相關部落格: 1. 實現技巧 為了簡化程式碼和減少不必要的開銷,在具體的實現中我們定義一個偽根節點ROOT且只定義一個NIL節點。偽根節點的左子支永遠指向NIL節點,NIL節點的左右子支又指向它自身。偽根節點的右子支才表示真正的紅黑樹。 2. Java語言實現 packa
資料結構(三):非線性邏輯結構-特殊的二叉樹結構:堆、哈夫曼樹、二叉搜尋樹、平衡二叉搜尋樹、紅黑樹、線索二叉樹
/* 性質1. 節點是紅色或黑色 性質2. 根是黑色 性質3. 每個紅色節點的兩個子節點都是黑色 (從每個葉子到根的所有路徑上不能有兩個連續的紅色節點) 性質4. 從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點 */ #include #include typedef enum
通過2-3-4樹理解紅黑樹
文章 n+1 情況下 代碼實現 樹結構 沒有 case 多人 檢驗 前言 紅黑樹是數據結構中比較復雜的一種,最近與它交集頗多,於是花了一周的空閑時間跟它死磕,終於弄明白並實現了紅黑樹。寫文總結一下,希望能給試圖理解紅黑樹的同學一些靈感,也讓我能記得更深刻。 在研究紅黑樹時吃
資料結構和演算法精講版(陣列、棧、佇列、連結串列、遞迴、排序、二叉樹、紅黑樹、堆、雜湊表)Java版
查詢和排序是最基礎也是最重要的兩類演算法,熟練地掌握這兩類演算法,並能對這些演算法的效能進行分析很重要,這兩類演算法中主要包括二分查詢、快速排序、歸併排序等等。我們先來了解查詢演算法! 順序查詢: 順序查詢又稱線性查詢。它的過程為:從查詢表的最後一個元素開始逐個與給定關鍵字比較,若某個記錄的關鍵字和給定值比較
淺談演算法和資料結構: 九 平衡查詢樹之紅黑樹
前面一篇文章介紹了2-3查詢樹,可以看到,2-3查詢樹能保證在插入元素之後能保持樹的平衡狀態,最壞情況下即所有的子節點都是2-node,樹的高度為lgN,從而保證了最壞情況下的時間複雜度。但是2-3樹實現起來比較複雜,本文介紹一種簡單實現2-3樹的資料結構,即紅黑樹(
資料結構導論-2.3 其他運算在單鏈表上的實現
一、尾插法建表1 演算法思路:每次在連結串列的尾部增加新的結點. 設資料元素的型別為int,利用InsertLinkList(LinkList head, int x, int i)來實現,依次增大插入位置,使新的結點鏈入到連結串列中。 演算法實現: LinkList
資料結構進階——二叉樹,紅黑樹
基本定義:一個根節點下分兩個子節點的樹結構稱為二叉樹。A為根節點,B、C分別為左孩子和右孩子,E這種無孩子的結點成為葉子結點,A,B,D,G共4層。二叉樹存在的三種排序方式圖中也說明的很清晰了。 先序:根->左->右; 中序:左->根->右; 後
演算法班筆記 第九章 資料結構:區間、陣列、矩陣和樹狀陣列
第九章 資料結構:區間、陣列、矩陣和樹狀陣列 子陣列與字首和 Subarry PrefixSum[i] = A[0] + A[1] + ... + A[i-1], PrefixSum[0] = 0; 構造花費 O(n) 時間,O(n) 空間 Sum(i to j)
資料結構理論基礎-3—棧與佇列
棧 棧(stack):是限定僅在表尾進行插入和刪除操作的線性表。(注意,表尾是棧頂,不是棧底) 允許插入和刪除的一端稱為棧頂(top),另一端稱為棧底(bottom),棧又稱為後進先出(Last In First Out),簡稱LIFO結構
資料結構樹之紅黑樹
紅黑樹簡介: 紅黑樹是一棵二叉搜尋樹,它在每個結點上增加了一個儲存位來表示結點的顏色,可以是RED 或 BLACK。通過對任何一條根到葉子的簡單路徑上各個結點的顏色進行約束,紅黑樹確保沒有一條路徑迴避其他路徑長處2倍,因而是近似平衡的。 樹的每個結點包含 5 個屬性:color,ke