概述:存储结构(顺序存储,链式存储)
顺序存储结构:用一段地址连续的存储单元依次存储结点,但是结点的位置都无法反应逻辑关系。
充分利用顺序存储和链式存储结构的特点,完全可以实现对树的存储结构的表示,三种不同的表示法:双亲表示法,孩子表示法,孩子兄弟法。
双亲表示法:
结点结构:data parent
data是数据域,存储结点的数据信息
parent 是指针域,存储该结点的双亲在数组中的下标
结点结构定义代码:
#define MAX_TREE_SIZE 100
typedef char TElemType;/*树结点的数据类型,目前暂定为整型*/
typedef struct PTNode //结点结构
{
TElemType data;//结点数据
int parent;//双亲位置
}PTNode;
typedef struct
{
PTNode nodes[MAX_TREE_SIZE];//结点数组
int r,n;//根的位置和结点数
}PTree;
由于根结点没有双亲,所以约定根结点的位置域设置为-1
树和结点数组的表示
int main()
{
PTree tree;
cout<<"请输入双亲表示法中树根的位置"<<endl;
cin>>tree.r;
cout<<"请输入双亲表示法中树结点个数"<<endl;
cin>>tree.n;
cout<<"请输入双亲表示法中树结点结构"<<endl;
for(int i=0;i<tree.n;i++)
{
cin>>tree.nodes[i].data>>tree.nodes[i].parent;
}
cout<<"index"<<"\t"<<"data"<<"\t"<<"parent"<<endl;
for(int i=0;i<tree.n;i++)
{
cout<<i<<"\t"<<tree.nodes[i].data<<"\t" <<tree.nodes[i].parent<<endl;
}
system("pause");
return 0;
}