課堂筆記 樹的邏輯結構 樹的儲存結構

2021-09-29 11:52:32 字數 1485 閱讀 2716

樹的邏輯結構

:n(n≥0)個結點的有限集合。

當n=0時,稱為空樹

任意一棵非空樹滿足以下條件:

⑴有且僅有乙個特定的稱為根的結點;

⑵當n>1時,除根結點之外的其餘結點被分成m(m>0)個互不相交的有限集合t1,t2,… ,tm,其中每個集合又是一棵樹,並稱為這個根結點的子樹。

樹的定義是採用遞迴方法

樹的基本術語

結點的度:結點所擁有的子樹的個數。

樹的度:樹中各結點度的最大值。

葉子結點:度為0的結點,也稱為終端結點。

分支結點:度不為0的結點,也稱為非終端結點。

孩子、雙親:樹中某結點子樹的根結點稱為這個結點的孩子結點,這個結點稱為它孩子結點的雙親結點;

兄弟:具有同乙個雙親的孩子結點互稱為兄弟。

路徑:如果樹的結點序列n1, n2, …, nk有如下關係:結點ni是ni+1的雙親(1<=istruct pnode;孩子表示法-多重鍊錶表示法(節點中的指標域表示孩子)

鍊錶中的每個結點包括乙個資料域和多個指標域,每個指標域指向該結點的乙個孩子結點。

方案一:指標域的個數等於樹的度

缺點:浪費空間

方案二:指標域的個數等於該結點的度

缺點:結點結構不一致

孩子表示法-孩子鍊錶表示法(每個節點建立乙個單鏈表)

特點:將每個結點的所有孩子放在一起,構成線性表。

基本思想: 把每個結點的孩子排列起來,看成是乙個線性表,且以單鏈表儲存,則n個結點共有 n 個孩子鍊錶。

這 n 個單鏈表共有 n 個頭指標,這 n 個頭指標又組成了乙個線性表。

為了便於進行查詢採用順序儲存儲存每個鍊錶的頭指標。

最後,將存放 n 個頭指標的陣列和存放n個結點的陣列結合起來,構成孩子鍊錶的表頭陣列。

孩子結點

struct ctnode ;
表頭結點

template struct cbnode ;
孩子兄弟表示法

某結點的第乙個孩子是惟一的,某結點的右兄弟是惟一的,設定兩個分別指向該結點的第乙個孩子和右兄弟的指標。

結點結構

template struct tnode;
樹的儲存結構小結

順序儲存:本質上是靜態指標

雙親表示法,雙親、孩子表示法

鏈式儲存:

多重鍊錶表示法,孩子鍊錶表示法,孩子兄弟表示法

樹的儲存結構

樹的儲存結構 樹的存貯結構有多種表示方法,比較典型的乃是順序結構和鍊錶結構兩類。順序存貯結構即向量,一般將樹結點按自上而下,自左至右的順序一一存放。如前文所介紹的完全二叉樹就可以採用順序存貯結構。1.雙親鍊錶表示法 順序儲存結構常用的有雙親表示法,這種方法在每個陣列元素中存放某個結點資訊和該結點的雙...

樹的儲存結構

樹的資料邏輯結構是一對n的,除了根節點,每個元素只有乙個前驅,但是可以有多個後繼,具有層次關係,像家譜就是乙個樹的例子。樹是有n個結點的有限集合,當n大於零時,這個樹有且僅有乙個稱為根的結點,從根節點延申出來的元素可以時n個,同時可以再延申。n 0時,該樹就是空樹。樹的第一層就是根結點,第二層都是稱...

樹的儲存結構

1 第一行乙個n,代表這個樹有n個節點,接下來輸入n行,第i行輸入兩個數字,li,ri,代表第i個節點的左兒子右兒子 節點序號從1編號到n 如果沒有左兒子或者右兒子,就用 1代替,輸出它的層序遍歷 include include include using namespace std struct ...