頭結點:
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...