各種二叉樹的介紹


數據結構中有很多種類的樹結構,例如,普通二叉樹、完全二叉樹、滿二叉樹、線索二叉樹、哈夫曼樹、二叉搜索樹(排序樹)、平衡二叉樹、AVL平衡二叉樹、紅黑樹、B樹、B+樹、堆

1、普通二叉樹、完全二叉樹、滿二叉樹

二叉樹:最多有兩棵子樹的樹被稱為二叉樹

滿二叉樹:二叉樹中所有非葉子結點的度都是2,且葉子結點都在同一層次上

完全二叉樹:如果一個二叉樹與滿二叉樹前m個節點的結構相同,這樣的二叉樹被稱為完全二叉樹

也就是說,如果把滿二叉樹從右至左、從下往上刪除一些節點,剩余的結構就構成完全二叉樹

采用順序存儲的完全二叉樹,可以根據任意節點的位置計算其父節點、孩子節點在數組中的位置(下標),如果父節點和孩子節點存在的話。

這也說明,完全二叉樹適合使用順序表存儲

 

2、線索二叉樹

關於樹的一些小知識點

 

3、哈夫曼樹(最優二叉樹)

Huffman樹及JAVA實現 

4、二叉搜索(查找、排序)樹

定義:

二叉查找樹,也叫二叉排序樹是滿足以下條件的二叉樹:
1.左子樹上的所有節點值均小於根節點值
2.右子樹上的所有節點值均不小於根節點值
3.左右子樹也滿足上述兩個條件

二叉查找樹(華中科技大學計算機考研復試上機題)

對二叉樹進行中序遍歷時,其輸出是一個有序數組

根據二叉排序樹的定義,發現其搜索過程具有二分特性,效率較高

缺點:二叉排序樹的最終形態與輸入數據的順序有關,

例如,輸入數據[1,2,3,4,5,6,7,8,9],最終形成的二叉排序樹如下圖

此時,二叉樹退化成了單鏈表,查找效率大大下降

5、平衡二叉樹

為了克服二叉排序樹的缺點,人們想出辦法,使得一棵樹的左右子樹高度大致相等

比較出名的是蘇聯科學家家G.M. Adelson-Velsky 和 E.M. Landis於1962年提出的,被命名為AVL樹,,和紅黑樹

 

6、AVL樹

任一節點的左子樹深度和右子樹深度相差不超過1,我們用平衡因子衡量這種差異

任意節點的平衡因子Balance(p)= heigth(p的左子樹) - height(p的右子樹)

在進行AVL樹的插入和刪除操作時,當平衡因子=2時,就要調整節點的位置,使其滿足AVL樹的定義

關於AVL樹的插入、刪除操作,隨后會進行記錄 

7、紅黑樹 

性質1. 節點是紅色或黑色。
性質2. 根節點是黑色。
性質3 每個葉節點(NIL節點,空節點)是黑色的。
性質4 每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
性質5. 從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。
紅黑樹 阿里特別看重,我做了總結

 

總結:我們知道,實際應用當中,我們經常使用的是查找和排序操作,這在我們的各種管理系統、數據庫系統、操作系統等當中,十分常用。

數組的下標尋址十分迅速,但計算機的內存是有限的,故數組的長度也是有限的,實際應用當中的數據往往十分龐大

而且無序數組的查找最壞情況需要遍歷整個數組

后來人們提出了二分查找,二分查找要求數組的構造一定有序。二分法查找解決了普通數組查找復雜度過高的問題

任和一種數組無法解決的問題就是插入、刪除操作比較復雜,因此,在一個增刪查改比較頻繁的數據結構中,數組不會被優先考慮

普通鏈表由於它的結構特點被證明根本不適合進行查找

二叉查找樹因為可能退化成鏈表,同樣不適合進行查找

哈希表是數組和鏈表的折中,,同時它的設計依賴散列函數的設計,數組不能無限長、鏈表也不適合查找,所以也適合大規模的查找

AVL樹的旋轉過程非常麻煩,因此插入和刪除很慢,也就是構建AVL樹比較麻煩

紅黑樹是平衡二叉樹和AVL樹的折中,因此是比較合適的。集合類中的Map、關聯數組具有較高的查詢效率,它們的底層實現就是紅黑樹

參考:查找(一)史上最簡單清晰的紅黑樹講解

參考:紅黑樹


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM