C++构造树(基于层次序列以及各节点度数)

#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####
*/