1. 程式人生 > >各類二叉樹及紅黑樹簡述

各類二叉樹及紅黑樹簡述

紅黑樹(Red Black Tree) 是一種自平衡二叉查詢樹,典型的用途是實現 關聯陣列。 紅黑樹和AVL(平衡二叉搜尋樹)樹類似,都是在進行插入和刪除操作時通過特定操作保持二叉查詢樹的平衡,從而獲得較高的查詢效能。它可以在O(log n)時間內做查詢,插入和刪除,這裡的n為樹中元素的數目。 紅黑樹在很多地方都有應用。在C++ STL中,很多部分(包括set, multiset, map, multimap)應用了紅黑樹的變體(SGI STL中的紅黑樹有一些變化,這些修改提供了更好的效能,以及對set操作的支援)。   在瞭解紅黑樹的同時,對以前學過的各類樹進行簡單的回顧(不太全面,簡單回顧一下,後面繼續學習): 1) 滿二叉樹(最後一層全為葉節點) 2) 完全二叉樹(與滿二叉樹的區別是最後一層不要求完整,堆為典型的完全二叉樹) 3) 平衡二叉樹(左右子樹深度絕對值相差小於2) 4) 二叉排序樹(又稱二叉查詢樹、 二叉搜尋樹) 5) AVL樹平衡二叉搜尋樹(既有平衡二叉樹的特性,又有二叉排序樹的特性) AVL樹是一種二叉查詢樹的優化結構,目的是為了提高查詢的效率。但是帶來的問題是需要在插入結點和刪除結點的時候維持整棵樹的平衡性,在某些情況下,這可能得不償失,也就是意味著,我們維護二叉查詢樹的平衡性的代價大於最後我們查詢所獲得的額外的收益。 6) B+、B-樹 B-樹是一棵多叉平衡搜尋樹,旨在比AVL樹能夠擁有更低的樹高度,提高查詢的效率,但是同AVL樹一樣,面對插入和刪除資料的操作後需要維持平衡,這可能帶來一些得不償失的情況。其次B-樹可以被採用在外存的資料查詢上,因為樹高比較低,這樣就可以減少磁碟的I/O次數。

B+樹比B-樹更多叉,這就使得樹可以更矮;B+樹的資料全部儲存在葉子結點,中間的結點只是儲存鍵值,不儲存資料,那麼也就是在相同的磁碟塊的大小的情況下,可以儲存更多的索引,這樣也可以減少磁碟的I/O次數。

關於AVL樹,B+  B-樹,紅黑樹的對比可參考https://www.cnblogs.com/gaopeng527/p/5258108.html