树的双亲表示法建树

#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;
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值