二叉树(C语言)

题目描述如 上图所示,由正整数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
2026年09月29日 01:13
有1个网友回答
网友(1):

这个问题,可以看成完全二叉树,有性质有节点i的父节点为: i/2.
而题目要求的意思也就是找到两个节点的公共父节点。(含可能为其中一个节点)
因此,思路如下:
输入两个值 x,y
找到较大的那个,(循环的,因不断改变,所以需不断比较)
做x=x/2;(假设此时x较大,x为int 型)
然后再比较,,如此反复。
当x==y时,结束,即为输出值。

(因马上断电,不给代码了,思路就是这样。。。)