數據結構之樹基礎知識

對於大量的輸入數據,數組結構需要較大的連續內存空間,鏈表的線性訪問時間太慢,存在空間和時間問題,數組和鏈接表結構不能滿足實際業務場景需求。一種簡單的新的數據結構產生了,那就是樹,大部分操作的運行時間平均爲O(logN)

 

樹(Tree)是一些節點的集合,樹可以爲空樹,也就是說可以爲空集。非空樹,是有一個根節點(root簡寫r)r以及0個或者多個非空子樹T_{1},T_{2},...T_{k},組成。一顆真實的樹,要有根,然後纔有樹葉,根和樹葉相連就是樹枝。

圖上就是一個顆樹,樹的高度爲4。樹的特性:(高度、深度、度)

1、樹有N個節點和N-1條邊的集合。一個根節點,圖中A是根節點。

2、沒有子節點的節點叫樹葉。

3、具有相同父節點的節點爲兄弟節點。

4、每個節點都有一條到自己本身長度爲0的路徑。從根節點到每個節點只有條路徑。

5、深度是從節點到根的路徑長,根本身的深度爲0。

6、高度是從節點到樹葉的最長路徑,所有樹葉的高度都是0。一顆樹的深度就是根的高度。

7、一個節點子樹的個數,稱爲該節點的度。

樹結構的一種實現:兒子兄弟表示法。每個節點除了數據對象之外,還要有指向它兒子的指針(引用)。如果有多個兒子可以把所有兒子放到節點的鏈表中。

public class SonSiblingTree {

    //第一個兒子
    private String firstChild;
    //下一個兄弟
    private String nextSibling;
    //本節點數據對象
    private String localID;

    //todo
}

樹的遍歷方法:前序遍歷,從根節點開始,在遍歷兒子。後序遍歷,從兒子節點開始,然後是根節點。

樹的結構有:

二叉樹:每個節點最多隻有左右兩個子節點。

二叉查找樹:每個節點最多隻有左右兩個子節點。對於樹中的任意節點N,都有它左子樹都小於節點N的值;右子樹都大於節點N的值。

AVL樹:帶平衡條件的二叉查找樹。每個節點的左子樹和右子樹的高度相差不能超過1。樹的深度平均\O (logN)

伸展樹:基本思想是當一個節點被訪問時,它要經過一系列的AVL樹的旋轉操作,被放到根節點上。

B-樹:不是二叉樹。

二叉樹另外一個重要概念:

度,節點沒有子樹節點,度數爲0;節點有一個子樹節點,度數爲1;節點有兩個子樹節點,度數爲2。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章