由于树中的每个结点都有唯一的一个双亲结点,所以可用一组连续的存储空间(一维数组)存储树中的各个结点,数组中的一个元素表示树中的一个结点,每个结点含两个域,数据域存放结点本身信息,双亲域指示本结点的双亲结点在数组中位置。
C语言代码实现:
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 20
typedef char ElemType;
typedef struct Snode //结点结构
{
ElemType data;
int parent;
}PNode;
typedef struct //树结构
{
PNode tnode[MAX_SIZE];
int n; //结点个数
}Ptree;
void InitPNode(Ptree &tree)
{
int i,j;
char ch;
printf("请输入结点个数:\n");
scanf("%d",&(tree.n));
printf("请输入结点的序及值其双亲序号:\n");
for(i=0; i<tree.n; i++)
{
fflush(stdin);
scanf("%c,%d",&ch,&j);
tree.tnode[i].data = ch;
tree.tnode[i].parent = j;
}
tree.tnode[0].parent = -1;
}
void FindParent(Ptree &tree)
{
int i;
printf("请输入要查询的结点的序号\n");
scanf("%d",&i);
printf(" %c 的父亲结点序号为 %d\n",tree.tnode[i].data,tree.tnode[i].parent);
}
int main()
{
Ptree tree;
InitPNode(tree);
while(1) //测试
FindParent(tree);
return 0;
}
测试结果: