#include <stdio.h>
#define MAX_TREE_SIZE 100
struct PTNode /*树的一个结点*/
{
char data;
int parent; /* 双亲位置域 */
};
struct PTree
{
struct PTNode nodes[MAX_TREE_SIZE];
int n; /* 结点数 */
};
/*
请在此介绍自己的算法,并解释算法的时间复杂度与空间复杂度
*/
char GetNearestCommonGrand(struct PTree T, char nodeData1, char nodeData2)//求出两个结点最近的共同祖先结点
{
int i;
int index1;
int index2;
int number=T.n;
for(i=0;i<number;i++){
if(T.nodes[i].data==nodeData1)
{
index1=i;
break;
}
}
for(i=0;i<number;i++){
if(T.nodes[i].data==nodeData2)
{
index2=i;
break;
}
}
while(T.nodes[index1].parent!=T.nodes[index2].parent){
index1=T.nodes[index1].parent;
index2=T.nodes[index2].parent;
}
int temp=T.nodes[index1].parent;
return T.nodes[temp].data;
}
struct PTree CreateTree()//建树
{
int i,n;
int parentId;
char ch;
struct PTree newTree;
scanf("%d", &n);
newTree.n=n;
for (i = 0; i < n; i++)
{
scanf(" %c%d", &ch, &parentId);
newTree.nodes[i].data=ch;
newTree.nodes[i].parent=parentId;
}
return newTree;
}
int main()
{
struct PTree aTree;
char node1, node2, nodeGrand;
aTree = CreateTree();
scanf(" %c %c", &node1, &node2);
nodeGrand= GetNearestCommonGrand (aTree, node1, node2);
printf("%c\n", nodeGrand);
return 0;
}
树的双亲表示法建树
最新推荐文章于 2022-12-14 13:22:13 发布