資料結構系列(5)樹狀結構
5樹狀結構
“樹”是有一個或一個以上的節點組成,存在一個特殊的節點,稱為樹根。每個節點是一些資料和指標組合而成的記錄。除了樹根,其餘節點可分為n>=0個互斥的集合,其中每一個子集合本身也是一種樹狀結構,即此根節點的子樹。此外一棵合法的樹,節點間可以互相連線,但不能形成無出口的迴路。
5.1 專有名詞介紹
- 度數:每個節點所有子樹的個數。
- 層數:樹的層數。
- 高度:輸的最大層數
- 樹葉或稱終端節點:度數為零的節點就是樹葉。
- 父節點:每一個節點有連線的上一層節點
- 子節點:每一個節點有連線的下一層節點。
- 祖先和子孫:祖先是指從樹根到該節點路徑上所包含的節點,而子孫是在該節點往下追溯子樹中的任一節點。
- 兄弟節點:有共同父節點的節點。
- 非終端節點:樹葉以外的節點。
- 同代:在同一棵中具有相同層數的節點。
5.2 二叉樹
二叉樹的特性:
1. 層數為i的樹,他的節點數最多是
2. 度數為k的二叉樹總節點數是
3. 對於任何非空二叉樹T,如果
4. 高度為k的二叉樹,總結點對少為k.
特殊二叉樹
完全二叉樹:
如果二叉樹的高度為h,所含的節點數小於
嚴格二叉樹:
二叉樹中每一個非終端節點均有非空的左右子樹。
5.3 二叉樹的儲存方式
二叉樹的儲存方式有很多,一般在資料結構的領域中習慣用連結串列來表示二叉樹組織。用一位陣列來表示時對樹中間節點進行插入刪除操作時,需要大量移動來反應節點的變動。
一維陣列表式法
使用有序的一維陣列來表示二叉樹,首先可將此二叉樹假想為一棵滿二叉樹,而且第K層具有2k-1個節點,他們按序存放在這個一維陣列中。
連結串列表式法
由於二叉樹最多隻能有兩個子節點,就是度數小魚或等於2,而所謂連結串列表式法,就是利用連結串列來儲存二叉樹。就是運用動態分配記憶體的指標的方式來建立二叉樹。
是用連結串列來表示二叉樹的好處是節點的增加和刪除操作相當容易,缺點是很難找到父節點,除非每一節點增加一個指向父節點的指標。
5.4二叉樹的遍歷
前序遍歷:
是一種”中左右“的遍歷順序,也就是先從根節點遍歷,再往左方移動,當無法繼續時,繼續向右方移動,接著再重複執行此步驟。
中序遍歷:
是左中右的遍歷順序,也就是從樹的左側逐步向下方移動,知道無法移動,在訪問此節點,並向右移動一個節點。如果無法再向右移動時,可以返回上層父節點,後右子樹。
後序遍歷:
後序遍歷是左右中的遍歷順序,就是先遍歷左子樹,在便利右子樹,最後遍歷根節點,反覆執行此步驟。
5.5線索二叉樹
二叉樹的儲存方式,節點儲存空間的浪費率可以從2/3降到1/2,對於一棵有n個節點的二叉樹,實際上用來指向左右兩節點的指標只有n-1個連結,另外的n+1個指標都是空連線。
所謂線索二叉樹就是把這些空的連結加以利用,再指到樹的其他節點,這些連結就稱為線索。