顺序存储二叉树之寻找公共祖先节点

题目:已知一课二叉树按顺序存储结构进行存储,设计一个算法,求编号分别为i和j的两个节点的最近的公共祖先节点的值
    分析:
        利用数组存储一颗二叉树,一般来说我们用这种方式存储一颗完全二叉树,不浪费空间。然后我们可以依据其下标的特性,下标的二分之一既是该节点的父节点

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int findCommonAncestor(int *arr,int i,int j) {
	while (i!=j) {
		i > j ? i = i / 2: j = j / 2;

	}
	return *(arr + i);
}
int main() {
	void createBiTree(int *,int);
	int count,i,j;
	printf("请输入所要创建的二叉树,其转换为完全二叉树的最少节点数:count=");
	scanf("%d",&count);
	int *arr = (int *)malloc(sizeof(int)*(count + 2));//下标为0我们不存
	createBiTree(arr,count);
	printf("请输入要查找公共节点的两个节点的编号,编号<=%d:\n",count);
	printf("i=");
	scanf("%d",&i);
	printf("\n");
	printf("j=");
	scanf("%d", &j);
	while (i>count || j>count || *(arr+i)==9999||*(arr+j)==9999 ){
		printf("编号有误,请重新输入:\n");
		printf("i=");
		scanf("%d", &i);
		printf("\n");
		printf("j=");
		scanf("%d", &j);
	}
	count = findCommonAncestor(arr,i,j);
	printf("公共祖先的值为:%d",count);
	return 0;
}

创建一颗二叉树代码为:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void createBiTree(int *arr,int count) {
	int i = 1,data;
	//int *arr = (int *)malloc(sizeof(int)*(count+2));//下标为0我们不存
	while (count--) {
		printf("请输入第%d个节点:",i);
		scanf("%d",&data);
		*(arr + i) = data;
		i++;
	}
}

如果心胸不似海,怎能成就海一样的事业。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北街学长

你的鼓励使我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值