1.圖和樹的關係
圖和樹的關係,是認識樹的重要性的重要方法。
樹是圖的一個子集;圖和樹的最大區分是:有序和無序。
一個圖可以是各種奇形怪狀的,具有各種奇怪關係的,甚至有完全不相關的部分。圖可以說是對世界本原的抽象,我們認識事物,往往是從一團混亂開始的;我們得到最初的世界的樣子,是一個混亂的圖狀結構。
而樹,則是有序的。樹有根節點,也就是意味着樹有起始點;樹從根節點出發,確定不同事物的關係,並建立逐級的區分;從根節點,確定子節點、兄弟節點、子孫節點和葉節點。通過樹,我們可以建立一套從頭到尾有序的抽象。
樹的有序性,讓我們認識事物,有了很好的方法。書籍的編寫,對宇宙星系的認識,對家庭和國家的定義,都是採用了樹的形式。
2.樹的便利性
樹的特點是有序性。這給我們認識世界帶來了便利。在計算機科學中,樹也帶來了很多的便利性。
計算機科學中,樹的便利性在於:
1)查找的便利性(樹本身有序,使查找方便);
2)插入數據的便利性;
3)刪除的便利性。
樹的便利性在於維護了有序的結構;有序的結構通過要時間代價和空間代價;這就會造成樹的查找時間會在O(logN)左右。很多計算機語言或者文件格式,如XML、JSON、ProtocolBuffer,本質都是樹。
3.幾種樹的區分
關於幾種樹的區分,我不一一列舉了,因爲太多的博客說了很多細節,我就幾項事情進行區分。
1)二叉樹:特殊的樹,最多隻有左樹和右樹兩個子樹;有廣度和深度兩大類搜索算法,深度搜索算法包括先根、中根和後根三個算法。
2)平衡二叉樹:一種特殊的二叉樹,特點是左右子樹高度不超過1;這種樹,好處是維護平衡;壞處是經常發生發生旋轉。
3)紅黑樹:根節點爲黑,葉節點爲黑的樹;紅黑樹本質是對平衡二叉樹爲維護平衡而不斷旋轉而做的優化,紅黑樹允許的不平衡性是2,所以可以很好得克服平衡二叉樹的爲維護平衡而經常旋轉的問題。紅黑樹是STL裏的map和set的基本結構。
4)B樹:不是二叉樹;可以有M個子樹,可以不在根節點上找到數據。
5)B+樹:B樹的擴充,根節點之間有一定鏈接,所有數據最終必須到根節點纔算命中。B樹和B+樹是MySQL等數據庫索引的基礎。