數據結構中有很多種類的樹結構,例如,普通二叉樹、完全二叉樹、滿二叉樹、線索二叉樹、哈夫曼樹、二叉搜索樹(排序樹)、平衡二叉樹、AVL平衡二叉樹、紅黑樹、B樹、B+樹、堆
1、普通二叉樹、完全二叉樹、滿二叉樹
二叉樹:最多有兩棵子樹的樹被稱為二叉樹
滿二叉樹:二叉樹中所有非葉子結點的度都是2,且葉子結點都在同一層次上
完全二叉樹:如果一個二叉樹與滿二叉樹前m個節點的結構相同,這樣的二叉樹被稱為完全二叉樹
也就是說,如果把滿二叉樹從右至左、從下往上刪除一些節點,剩余的結構就構成完全二叉樹

采用順序存儲的完全二叉樹,可以根據任意節點的位置計算其父節點、孩子節點在數組中的位置(下標),如果父節點和孩子節點存在的話。
這也說明,完全二叉樹適合使用順序表存儲
2、線索二叉樹
3、哈夫曼樹(最優二叉樹)
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、紅黑樹
總結:我們知道,實際應用當中,我們經常使用的是查找和排序操作,這在我們的各種管理系統、數據庫系統、操作系統等當中,十分常用。
數組的下標尋址十分迅速,但計算機的內存是有限的,故數組的長度也是有限的,實際應用當中的數據往往十分龐大
而且無序數組的查找最壞情況需要遍歷整個數組
后來人們提出了二分查找,二分查找要求數組的構造一定有序。二分法查找解決了普通數組查找復雜度過高的問題
任和一種數組無法解決的問題就是插入、刪除操作比較復雜,因此,在一個增刪查改比較頻繁的數據結構中,數組不會被優先考慮
普通鏈表由於它的結構特點被證明根本不適合進行查找
二叉查找樹因為可能退化成鏈表,同樣不適合進行查找
哈希表是數組和鏈表的折中,,同時它的設計依賴散列函數的設計,數組不能無限長、鏈表也不適合查找,所以也適合大規模的查找
AVL樹的旋轉過程非常麻煩,因此插入和刪除很慢,也就是構建AVL樹比較麻煩
紅黑樹是平衡二叉樹和AVL樹的折中,因此是比較合適的。集合類中的Map、關聯數組具有較高的查詢效率,它們的底層實現就是紅黑樹
參考:紅黑樹
