二叉树(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%
帮助的人:50.7万
展开全部
这个问题,可以看成完全二叉树,有性质有节点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;
}


多思考啊,之前思路说的很清楚了。照着写就是。(代码已测试)
TableDI
2024-07-18 广告
在Excel中,字符串匹配函数主要用于查找和定位特定字符串在文本中的位置或进行替换操作。常用的字符串匹配函数包括FIND、SEARCH、SUBSTITUTE和REPLACE等。FIND和SEARCH函数用于查找字符串的位置,而SUBSTIT... 点击进入详情页
本回答由TableDI提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式