樹的雙親表示法,孩子表示法以及孩子兄弟表示法

2022-01-29 17:46:52 字數 2490 閱讀 9940

目錄如下圖所示,這是一棵普通的樹,該如何儲存呢?通常,儲存具有普通樹結構資料的方法有 3 種:

雙親表示法;

孩子表示法;

孩子兄弟表示法;

圖1雙親表示法採用順序表(也就是陣列)儲存普通樹,其實現的核心思想是:順序儲存各個節點的同時,給各節點附加乙個記錄其父節點位置的變數

注意,根節點沒有父節點(父節點又稱為雙親節點),因此根節點記錄父節點位置的變數通常置為 -1。

圖2雙親表示法儲存普通樹**

/*

* @description: 樹的雙親表示法

* @version: v1.0

* @autor: carlos

* @date: 2020-05-21 14:41:32

* @lasteditors: carlos

* @lastedittime: 2020-06-01 22:12:34

*/ #include#include//巨集定義樹中結點的最大數量

#define max_size 20

//巨集定義樹結構中資料型別

typedef char elemtype;

//結點結構

typedef struct snode

pnode;

//樹結構

typedef struct

ptree;

/** * @description: 節點初始化

* @param: ptree tree 結構體變數

* @return: ptree 結構體位址

* @author: carlos

*/ptree initpnode(ptree tree)

childptr;

typedef struct ctbox;

typedef structctree;

/** * @description: 孩子表示法儲存普通樹

* @param: ctree tree 樹的結構體變數

* @return: ctree tree 結構體變數

* @author: carlos

*/ctree inittree(ctree tree)}}

return tree;

}/**

* @description:查詢節點

* @param: ctree tree 樹的結構體,char a 要查詢的節點

* @return: 無

* @author: carlos

*/void findkids(ctree tree,char a)

break;}}

if(haskids==0)

}int main()

樹結構中,位於同一層的節點之間互為兄弟節點。例如,圖1中的普通樹中,節點 a、b 和 c 互為兄弟節點,而節點 d、e 和 f 也互為兄弟節點。

孩子兄弟表示法,採用的是鏈式儲存結構,其儲存樹的實現思想是:從樹的根節點開始,依次用鍊錶儲存各個節點的孩子節點和兄弟節點

因此,該鍊錶中的節點應包含以下 3 部分內容:

節點的值;

指向孩子節點的指標;

指向兄弟節點的指標;

圖4用 c 語言**表示節點結構為:

#define elemtype char

typedef struct csnodecsnode,*cstree;

以圖1為例,使用孩子兄弟表示法進行儲存的結果如下圖所示:

圖5由圖5可以看到,節點 r 無兄弟節點,其孩子節點是 a;節點 a 的兄弟節點分別是 b 和 c,其孩子節點為 d,依次類推。

實現上圖中的 c 語言實現**也很簡單,根據圖中鍊錶的結構即可輕鬆完成鍊錶的建立和使用,因此不再給出具體**。

接下來觀察圖 1 和圖 5。圖 1 為原普通樹,圖5 是由圖 1 經過孩子兄弟表示法轉化而來的一棵樹,確切地說,圖5是一棵二叉樹。因此可以得出這樣乙個結論,即通過孩子兄弟表示法,任意一棵普通樹都可以相應轉化為一棵二叉樹,換句話說,任意一棵普通樹都有唯一的一棵二叉樹於其對應。

因此,孩子兄弟表示法可以作為將普通樹轉化為二叉樹的最有效方法,通常又被稱為"二叉樹表示法"或"二叉鍊錶表示法"。

有任何問題,均可通過公告中的***聯絡我

樹的雙親孩子表示法

完成了圖的鄰接表表示法,發現它的儲存結構與樹的孩子鍊錶表示法相似,都是由乙個陣列加若干鄰接鍊錶形成的結構。只是在構造和遍歷時有所區別。在孩子鍊錶中查詢兄弟結點比較困難,查詢孩子和雙親很方便,故適用於對孩子操作較多的應用。結構圖示為 下面是c語言 實現 include include define m...

樹的儲存結構 雙親表示法 孩子表示法 孩子兄弟法

實現 定義結構陣列存放樹的結點,每個結點包含兩個域 結點結構 結點型別定義 typedef struct ptnode ptnode 另外,用r儲存根結點的下標,用n表示結點個數 樹的雙親表示法示例 樹結構型別定義 define max tree size 100 typedef struct pt...

樹的孩子雙親表示法

新增鏈結描述 按照上述部落格,測試了一下這個程式.有兩點說說明一下.首先,博主說使用c語言,我第一次用.c檔案編譯,出現error expected or before token 這是使用了引用 而在c語言中沒有引用的概念,在c語言中是取位址符號.後期改為.cpp檔案即可執行 第二點就是 fflu...