DS 各種樹形結構,以及其應用

2021-05-21 14:43:46 字數 1577 閱讀 2359

紅黑樹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 線性結構

線性結構的定義 若結構是非空有限集,則有且僅有乙個開始結點和乙個終端結點,並且所有結點都最多只有乙個直接前驅和乙個直接後繼。線性結構的特點 只有乙個首結點和尾結點 除首尾結點外,其他結點只有乙個直接前驅和乙個直接後繼 簡言之,線性結構反映結點間的邏輯關係是一對一 的 線性結構包括 線性表 堆疊 佇列...