一、樹的定義
1.樹(tree)是n(n>=0)個結點的有限集。n= 0時稱為空樹,在任何一棵非空樹中,有且僅有乙個根結點,當n>1時,其餘結點可分為m個互不相交的有限集,其中每乙個集合本身又是一棵樹,並稱為根的子樹。
2、結點的分類
結點擁有的子樹個數稱為結點的度。度為0的結點稱為葉結點或終端結點。度不為0的結點稱為分支結點或非終端結點。樹的度為樹內各結點度的最大值。
3、結點關係
結點的子樹的根稱為該結點的孩子,該結點稱為孩子結點的雙親。同乙個雙親的結點稱為兄弟
結點的祖先是從根到該結點所經分支上的所有結點。以某結點為跟的子樹的任何乙個結點都被稱為該結點的子孫。
4、樹的其他概念
結點的層次從根結點開始,根為第一層,根的孩子為第二層。其雙親在同一層次的結點互為堂兄弟。樹中結點的最大層次稱為樹的深度或高度。
如果將樹中的結點看做是從左至右是有次序的,不能互換的,則稱該樹為有序樹,否則為無序樹。
二、樹的儲存結構
樹的儲存結構分為順序儲存於鏈式儲存兩種結構;
1、雙親表示法:
將一組連續空間儲存樹的結點,每個結點包含乙個data資料域和乙個指標域指向雙親在陣列中的下表;
1由於根結點沒有雙親,所以講=將根結點的位置域設定為-1.#define max_size 50
2 typedef int
elemtype;
3 typedef struct ptnode //
結點結構
4ptnode;
89 typedef struct ptree //
樹結構10
ptree;
2、孩子表示法:
每個結點指標域的個數等於該結點的度。把每個結點的孩子結點排序起來,以單鏈表作為儲存結構,則n個結點有n個孩子鍊錶,如果是葉子結點側次單鏈表為空,然後n個頭指標又組成乙個線性表,採用順序儲存結構,存放進乙個一維陣列中。
data
degree
child1
child2
......
childn
1#define max_size 50
2 typedef int
elemtype;
3 typedef struct ctnode //
孩子結點結構
4*childptr;
89 typedef struct
//表頭結構
10ctbox;
1415 typedef struct
//樹結構
3、孩子兄弟表示法:
任意一棵樹,他的結點的第乙個孩子如果存在就是唯一的,他的右兄弟如果存在也是唯一的。因此,可設定兩個指標,分別指向該結點的第乙個孩子和次結點的右兄弟。
1 typedef intelemtype;
2 typedef struct ctnode //孩子兄弟
結點結構
樹基礎知識
陣列儲存方式的分析 優點 通過下標方式訪問元素,速度快。對於有序陣列,還可使用二分查詢提高檢索速度。缺點 如果要檢索具體某個值,或者插入值 按一定順序 會整體移動,效率較低 示意圖 畫出操作示意圖 2.鏈式儲存方式的分析 優點 在一定程度上對陣列儲存方式有優化 比如 插入乙個數值節點,只需要將插入節...
樹的基礎知識
樹 樹定義專業定義 1 有且只有乙個稱為根的節點 2 有若干個互不相交的子樹,這些子樹本身也是一棵樹 通俗定義 1 樹是由節點和邊組成 2 每個節點只有乙個父節點但可以有多個子節點 3 但有乙個節點例外,該節點沒有根節點,此節點稱為根節點 專業術語 節點父節點子節點 子孫堂兄弟 深度 從根節點到最底...
樹的基礎知識
二叉樹的儲存 連續儲存 完全二叉樹 優點 查詢某個節點的父節點和子節點 也包括沒有資料的節點 缺點 耗用記憶體空間過大 鏈式儲存一般樹的儲存 雙親表示法 求父節點方便 孩子表示法 求子節點方便 雙親孩子表示法 求父節點子節點都方便 二叉樹表示法 把乙個普通樹轉換成二叉樹來儲存具體的轉換方法 設法保證...