樹的邏輯結構
樹: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 ...