樹的表示 2 子女兄弟表示法

2021-09-29 02:58:29 字數 2173 閱讀 3053

頭結點:

struct node

;

1、建樹:

通過給定樹的層次序列所有元素以及對應結點的度來構造樹。例如這樣一課樹:

rad

ebcf

gh

k

它的層次遍歷為:rabcdefghk

對應結點的度為:3 ,2 ,0 ,1 ,0 ,0 ,3 ,0 ,0 ,0

建樹的演算法思路:

先建立n個樹結點,給他們賦值並將指標初始化;然後掃瞄結點的度,按度數d取緊接著的d個結點的元素值建立d叉樹。這都依賴於層次次序排列的特點。

void

createchildandsiblingtree

(node *

&root, string e, vector<

int>

degree)

node *

*q =

newnode

*[e.

length()

];//輔助陣列,用於存放樹結點的位址

for(

int i =

0; i < e.

length()

; i++

)//初始化所有的樹結點

int k =0;

// for

(int i =

0; i < e.

length()

; i++

)//掃瞄所有結點 }}

root = q[0]

;//根存在q[0]所指的結點

delete q;

}

2、列印:

void

printchildandsiblingtree

(node *root,

int k)

}}

3、獲取某個結點的雙親

node*

getparent

(node* root,node *p)

return null;

//該樹(子樹)無雙親

}

4、全部**:

#include

#include

#include

using namespace std;

struct node

;void

createchildandsiblingtree

(node *

&root, string e, vector<

int>

degree)

node *

*q =

newnode

*[e.

length()

];//輔助陣列,用於存放樹結點的位址

for(

int i =

0; i < e.

length()

; i++

)//初始化所有的樹結點

int k =0;

// for

(int i =

0; i < e.

length()

; i++

)//掃瞄所有結點 }}

root = q[0]

;//根存在q[0]所指的結點

delete q;

}void

printchildandsiblingtree

(node *root,

int k)}}

node*

getparent

(node* root,node *p)

return null;

//該樹(子樹)無雙親

}int

main()

; node *root = null;

createchildandsiblingtree

(root, e, degree)

;printchildandsiblingtree

(root,0)

;return0;

}

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

目錄如下圖所示,這是一棵普通的樹,該如何儲存呢?通常,儲存具有普通樹結構資料的方法有 3 種 雙親表示法 孩子表示法 孩子兄弟表示法 圖1雙親表示法採用順序表 也就是陣列 儲存普通樹,其實現的核心思想是 順序儲存各個節點的同時,給各節點附加乙個記錄其父節點位置的變數。注意,根節點沒有父節點 父節點又...

樹 孩子兄弟表示法的實現

樹狀圖是一種資料結構,它是由n n 1 個有限節點組成乙個具有層次關係的集合。把它叫做 樹 是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具有以下的特點 每個節點有零個或多個子節點 沒有父節點的節點稱為根節點 每乙個非根節點有且只有乙個父節點 除了根節點外,每個子節點可以分為多個不...

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

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