一棵树采用双亲表示法存储,设计一个算法,计算树的深度
#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;
//初始化并且创建树
PTree InitPNode(PTree T)
{
int i, j;
char ch;
printf("请输出节点个数:\n");
scanf("%d", &(T.n));
printf("请输入结点的值其双亲位于数组中的位置下标:\n");
for (i = 0; i < T.n; i++)
{
fflush(stdin);
scanf("%c %d", &ch, &j);
T.tnode[i].data = ch;
T.tnode[i].parent = j;
}
return T;
}
//获得树的深度
int getTreeDepth(PTree T) {
int i, j;
int dep;
int maxdep = 0;
for (i = 0; i < T.n; i++) {
dep = 0;
for (j = i; j >= 0; j = T.tnode[j].parent)dep++;
if (dep > maxdep)maxdep = dep;
}
return maxdep;
}
int main()
{
PTree T;
T = InitPNode(T);
printf("树的深度为:%d\n", getTreeDepth(T));
return 0;
}
/* 测试数据
R -1
A 0
B 0
C 0
D 1
E 1
F 3
G 6
H 6
K 6
*/