二叉树(C语言)
题目描述如上图所示,由正整数1,2,3,...组成了一棵无限大的二叉树。从某一个结点到根结点(编号是1的结点)都有一条唯一的路径,比如从10到根结点的路径是(10,5,2...
题目描述
如 上图所示,由正整数1, 2, 3, ...组成了一棵无限大的二叉树。从某一个结点到根结点(编号是1的结点)都有一条唯一的路径,比如从10到根结点的路径是(10, 5, 2, 1),从4到根结点的路径是(4, 2, 1),从根结点1到根结点的路径上只包含一个结点1,因此路径就是(1)。对于两个结点x和y,假设他们到根结点的路径分别是
(x1, x2, ... ,1)和(y1, y2, ... ,1)(这里显然有x = x1,y = y1),那么必然存在两个正整数i和j,使得从xi和 yj
开始,有xi= yj, 现在的问题就是,给定x和y,要求xi(也就是yj)。
输入要求
输入只有一行,包括两个正整数x和y,这两个正整数都不大于1000。
输出要求
输出只有一个正整数xi。
假如输入
10 4
应当输出
2 展开
如 上图所示,由正整数1, 2, 3, ...组成了一棵无限大的二叉树。从某一个结点到根结点(编号是1的结点)都有一条唯一的路径,比如从10到根结点的路径是(10, 5, 2, 1),从4到根结点的路径是(4, 2, 1),从根结点1到根结点的路径上只包含一个结点1,因此路径就是(1)。对于两个结点x和y,假设他们到根结点的路径分别是
(x1, x2, ... ,1)和(y1, y2, ... ,1)(这里显然有x = x1,y = y1),那么必然存在两个正整数i和j,使得从xi和 yj
开始,有xi= yj, 现在的问题就是,给定x和y,要求xi(也就是yj)。
输入要求
输入只有一行,包括两个正整数x和y,这两个正整数都不大于1000。
输出要求
输出只有一个正整数xi。
假如输入
10 4
应当输出
2 展开
1个回答
展开全部
这个问题,可以看成完全二叉树,有性质有节点i的父节点为: i/2.
而题目要求的意思也就是找到两个节点的公共父节点。(含可能为其中一个节点)
因此,思路如下:
输入两个值 x,y
找到较大的那个,(循环的,因不断改变,所以需不断比较)
做x=x/2;(假设此时x较大,x为int 型)
然后再比较,,如此反复。
当x==y时,结束,即为输出值。
(因马上断电,不给代码了,思路就是这样。。。)
而题目要求的意思也就是找到两个节点的公共父节点。(含可能为其中一个节点)
因此,思路如下:
输入两个值 x,y
找到较大的那个,(循环的,因不断改变,所以需不断比较)
做x=x/2;(假设此时x较大,x为int 型)
然后再比较,,如此反复。
当x==y时,结束,即为输出值。
(因马上断电,不给代码了,思路就是这样。。。)
追问
可以今天给代码吗
追答
#include <stdio.h>
int main()
{
int x,y;
printf("输入两个正整数: \n");
scanf("%d%d",&x,&y);
while(x!=y)
{
if(x>y)
x=x/2;
else
y=y/2;
}
printf("%d\n",x);
return 0;
}
多思考啊,之前思路说的很清楚了。照着写就是。(代码已测试)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询