树的存储的结构有很多,这次介绍的是双亲表示法存储树结构。
要点:
节点的双亲信息存储在数组中,这样通过遍历数组来访问各个节点。
以下是代码实现:
#include<iostream>
#define MAXSIZE 100
using namespace std;
typedef struct Treecode{
char data;
int parent;
}Treecode;
class Tree{
private:
Treecode Index[MAXSIZE]; //最大节点个数
int pos;
public:
Tree(){pos=0;}
void InitTree();
void InsertCode(char data,int parentIndex);
void Traverse();
};
void Tree::InitTree() {
Treecode newcode;
newcode.data='0';
newcode.parent=pos;
}
void Tree::InsertCode(char data,int parentIndex) {
if (pos >= MAXSIZE) {
cout << "Error: Tree is full." << endl;
return;
}
Treecode newTreecode;
newTreecode.data=data;
newTreecode.parent=parentIndex;
Index[pos]=newTreecode;
pos++;
}
void Tree::Traverse() {
if (pos==0){
cout<<"The tree is empty.";
return;
}
cout << "Tree nodes: ";
for(int i=0;i<pos;i++){
cout<<Index[i].data<<","<<Index[i].parent<<endl;
}
}
int main(){
Tree tree;
int i,n;
char data;int index;
tree.InitTree();
cout<<"请输入节点个数:";
cin>>n;
for(i=0;i<n;i++){
cout<<"输入数据和节点位置:";
cin>>data>>index;
tree.InsertCode(data,index);
}
tree.Traverse();
return 0;
}