紅黑樹rbtree 二叉排序樹
紅黑樹是一種自平衡二叉查詢樹,是在電腦科學中用到的一種資料結構,典型的用途是實現關聯陣列。它是在2023年由rudolf bayer發明的,他稱之為"對稱二叉b樹",它現代的名字是在 leo j. guibas 和 robert sedgewick 於2023年寫的一篇**中獲得的。它是複雜的,但它的操作有著良好的最壞情況執行時間,並且在實踐中是高效的: 它可以在o(log n)時間內做查詢,插入和刪除,這裡的n 是樹中元素的數目。
紅黑樹是一種很有意思的平衡檢索樹。它的統計效能要好於平衡二叉樹,因此,紅黑樹在很多地方都有應用。
在c++ stl中,很多部分(目前包括set, multiset, map, multimap)應用了紅黑樹的變體(sgi stl中的紅黑樹有一些變化,這些修改提供了更好的效能,以及對set操作的支援)。
trie樹
又稱單詞查詢樹,trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串(但不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是:利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。
b-樹
2023年,r.bayer和e.mccreight提出了一種適用於外查詢的樹,它是一種平衡的多叉樹,稱為b樹,其定義如下:
一棵m階的b-樹滿足下列條件:
⑴ 樹中每個結點至多有m個孩子;
⑵ 除根結點和葉子結點外,其它每個結點至少有m/2個孩子;
⑶ 若根結點不是葉子結點,則至少有2個孩子;
⑷ 所有葉子結點都出現在同一層,葉子結點不包含任何關鍵字資訊;
⑸ 有k個孩子的非終端結點恰好包含有k-1個關鍵字。
b樹索引是資料庫中訪問和查詢檔案(稱為記錄或鍵值)的一種方法。b-tree演算法減少定位記錄時所經歷的中間過程,從而加快訪問速度。
典型例子就是硬碟中的結點。與記憶體相比,硬碟必須花成倍的時間來訪問乙個資料元素,這是因為硬碟的機械部件讀寫資料的速度遠遠趕不上純電子**的記憶體。
b+樹
b+樹可以看作是b樹的變形,對於存放在外存貯器上的字典,b+樹比b樹更為常用。
乙個m階的b+樹滿足下列條件∶
(1) 每個結點至多有m棵子樹。
(2) 除根結點外,其它每個分支至少有m/2棵子樹。
(3) 非葉結點的根結點至少有兩棵子樹。
(4) 有n棵子樹的結點有n個關鍵碼,葉結點中至少包含n/2個關鍵碼。
(5) 葉結點都在同一層中,其中存放資料檔案中記錄的關鍵碼及指向該記錄的指標,或存放資料檔案分塊後每塊的最大關鍵碼及指向該塊的指標。葉結點按關鍵碼值大小順序鏈結。可以把每個葉結點看成是乙個基本索引塊(直接指向資料檔案中的記錄)。
(6) 所有分支結點可看成是索引的索引。使結點中僅包含它的各個子結點中最大(或最小)關鍵碼的分界值及指向子結點的指標。
通常用於資料庫和作業系統的檔案系統中。b+ 樹的特點是能夠保持資料穩定有序,其插入與修改擁有較穩定的對數時間複雜度。b+ 樹元素自底向上插入,這與二叉樹恰好相反。
各種樹的構建方法
已知先序中序構樹 include include using namespace std const int n 50 int pre n in n post n 存放先序,中序,後序的陣列 int n 樹中元素個數 struct node node create int prel,int prer...
樹的遍歷(各種樹)
1.靜態寫法 struct node node maxn 結點陣列,maxn為結點上限個數當需要新建乙個結點時,就按順序從陣列中取出乙個下標即可,與二叉樹的靜態實現類似 int index 0 int newnode int v 不過一般涉及 非二叉樹 的考查時,一般都給出結點的編號 2,樹的先根遍...
D S 線性結構
線性結構的定義 若結構是非空有限集,則有且僅有乙個開始結點和乙個終端結點,並且所有結點都最多只有乙個直接前驅和乙個直接後繼。線性結構的特點 只有乙個首結點和尾結點 除首尾結點外,其他結點只有乙個直接前驅和乙個直接後繼 簡言之,線性結構反映結點間的邏輯關係是一對一 的 線性結構包括 線性表 堆疊 佇列...