二叉树(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
展开
 我来答
最不过执着
2014-04-24 · 超过45用户采纳过TA的回答
知道小有建树答主
回答量:70
采纳率:0%
帮助的人:51.3万
展开全部
这个问题,可以看成完全二叉树,有性质有节点i的父节点为: i/2.
而题目要求的意思也就是找到两个节点的公共父节点。(含可能为其中一个节点)
因此,思路如下:
输入两个值 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;
}


多思考啊,之前思路说的很清楚了。照着写就是。(代码已测试)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式