#include<iostream> #include<stdlib.h> #include<stack> #define Max_Size 100 using namespace std; typedef struct treenode { char data; treenode *first; treenode *neighbor; }*Node; //初始化 void Init(Node *&root,char *data_c,int n) { for (int i = 0; i < Max_Size; i++) { root[i] = new treenode; if (i < n) { root[i]->data = data_c[i]; } root[i]->first = NULL; root[i]->neighbor = NULL; } } //构造树 void Change(Node *&root, int n,int *d) { int k_b = 0, k_e = 0, end = 0; for (int i = 0; i < n; i++) { if (i == 0) { k_b = 1; k_e = d[i] + k_b - 1; //初始化父节点的子节点区间 end = 0; root[i]->first = root[k_b]; //由子节点建立邻接点 for (int j = k_b; j < k_e; j++) { root[j]->neighbor = root[j + 1]; } } else { if (d[i] > 1) { //存在子节点 k_b = k_e + 1; //更新first k_e = k_b + d[i] - 2; root[i]->first = root[k_b]; //由子节点建立邻接点 for (int j = k_b; j < k_e; j++) { root[j]->neighbor = root[j + 1]; } } } } } void Print(Node head) { //输出树,验证正确与否 if (head) { cout << head->data << " "; Print(head->first); Print(head->neighbor); } } void Delete(Node *&root) { delete[] root; } int main() { Node *root = new Node[Max_Size]; int d[9] = { 3,3,2,2,2,1,1,1,1 }; //度数数组 char data_c[9] = { 'a','b','c','d','e','f','g','h','i' }; //数据 Init(root, data_c, 9); Change(root,9, d); Node head = *root; Print(head); Delete(root); system("pause"); return 0; } /* ABD##E##CF### ABD##E##C#F## AB#CD##EF#### */
C++构造树(基于层次序列以及各节点度数)
猜你喜欢
转载自blog.csdn.net/coolsunxu/article/details/80472918
今日推荐
周排行