算法
void CreatCSTree_Degree(Tree &t, DateType e[], int degree[], int n) {
int k = 0;
Tree pointer = new Node[maxNodes];
for (int i = 0; i < n; i++) {
pointer[i].date = e[i];
pointer[i].fch = pointer[i].nsib = NULL;
}
for (int i = 0; i < n; i++) {
int d = degree[i];
if (d) {
k++;
pointer[i].fch = &pointer[k];
for (int j = 2; j <= d; j++) {
pointer[k].nsib = &pointer[k + 1];
k++;
}
}
}
for (int i = 0; i < n; i++) {
//cout << pointer[i].date;
//if (pointer[i].fch) cout<<"左"<< pointer[i].fch->date;
//if (pointer[i].nsib) cout << "右" << pointer[i].nsib->date;
cout << "这里"<<endl;
}
t = pointer;
}
测试环境
#include<iostream>
using namespace std;
#define ElemType char
#define DateType char
#define maxNodes 15
typedef struct node {
ElemType date;
struct node *fch, *nsib;
}Node, *Tree;
Tree CreateBiTree();
void Traverse(Tree p);
void CreatCSTree_Degree(Tree &t, DateType e[], int degree[], int n);
int main(){
char ch[] = { 'z','a','c','g','j','b','e','f','k','l','d','h','i','m','n'};
int degree[] = { 4,2,1,0,2,1,1,2,0,1,0,0,0,0,0 };
Tree T;
CreatCSTree_Degree(T, ch, degree, 15);
Traverse(T);
delete[]T;
return 0;
}
void CreatCSTree_Degree(Tree &t, DateType e[], int degree[], int n) {
int k = 0;
Tree pointer = new Node[maxNodes];
for (int i = 0; i < n; i++) {
pointer[i].date = e[i];
pointer[i].fch = pointer[i].nsib = NULL;
}
for (int i = 0; i < n; i++) {
int d = degree[i];
if (d) {
k++;
pointer[i].fch = &pointer[k];
for (int j = 2; j <= d; j++) {
pointer[k].nsib = &pointer[k + 1];
k++;
}
}
}
for (int i = 0; i < n; i++) {
//cout << pointer[i].date;
//if (pointer[i].fch) cout<<"左"<< pointer[i].fch->date;
//if (pointer[i].nsib) cout << "右" << pointer[i].nsib->date;
cout << "这里"<<endl;
}
t = pointer;
}
void Traverse(Tree p) {
if (p == NULL) {
return;
}
else {
Traverse(p->fch);
printf("%c", p->date);
Traverse(p->nsib);
}
return;
}
Tree CreateBiTree() {
Tree p;
char a;
cin >> a;
if (a == '#')
p = NULL;
else {
p = (Tree)malloc(sizeof(Node));
p->date = a;
p->fch = CreateBiTree();
p->nsib = CreateBiTree();
}
return p;
}