首页 > 其他分享 >316完全二叉树的公共父结点

316完全二叉树的公共父结点

时间:2023-12-23 11:44:47浏览次数:43  
标签:结点 xi int 路径 316 yj 二叉树

题目:完全二叉树的公共父结点

问题描述

有一棵无限大的完全二叉树,该二叉树自上而下、自左而右从1开始编号。从某一个结点到根结点(编号是1的结点)都有一条唯一的路径,比如从5到根结点的路径是(5, 2, 1),从4到根结点的路径是(4, 2, 1),从根结点1到根结点的路径上只包含一个结点1,因此路径就是(1)。对于两个结点x和y,假设他们到根结点的路径分别是(x1, x2, ... ,1)和(y1, y2,...,1),那么必然存在两个正整数i和j,使得从xi 和yj 开始,有xi = yj,xi + 1 = yj + 1,xi + 2 = yj + 2,...

现在的问题就是,给定x和y,要求他们的最近公共父节点,即xi(也就是 yj)。

输入格式

        输入包含多组数据,每组数据包含两个正整数x和y(1≤x, y≤2^31-1)。

输出格式

        对应每一组数据,输出一个正整数xi,即它们的首个公共父节点。每输出一个数字后要换行。

样例输入

10 4

    0 0

样例输出

        2

样例说明

结点10到根结点的路径为(10,5,2,1),结点4到根节点的路径为(4,2,1),所以他们的首个公共父结点为2。

 

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int x,y;
 5     int xi,yj;
 6     int result[100]={0};
 7     int k=0;
 8     int i;
 9     while(1)
10     {
11         scanf("%d%d",&x,&y);
12         if(x==0&&y==0) break;
13         
14         xi=x;
15         yj=y;
16         while(xi!=yj)
17         {
18             if(xi>yj) xi/=2;
19             else yj/=2;
20         }
21         result[k++]=xi;
22     }
23     for(i=0;i<k;i++)
24     {
25         printf("%d\n",result[i]);
26     }
27     
28     return 0;
29 }

用的迭代;

这个输出不是必须一口气,result数组用来存结果但是多余了;(一开始不知道)

标签:结点,xi,int,路径,316,yj,二叉树
From: https://www.cnblogs.com/xzdmzrc221202/p/17922831.html

相关文章

  • 315二叉树扩展先序遍历转中序遍历
    题目:二叉树扩展先序遍历转中序遍历问题描述编一个程序,读入用户输入的一串扩展先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的扩展先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出......
  • 314完全二叉树的子树
    题目:完全二叉树的子树问题描述对一棵完全二叉树,采用自上而下、自左往右的方式从1开始编号,我们已知这个二叉树的最后一个结点是n,现在的问题是结点m所在的子树一共包括多少个结点?输入格式       输入数据包括多行,每行给出一组测试数据,包括两个整数m,n(1<=m<=n<=10......
  • 23_合并二叉树
    617.合并二叉树给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为null的节点将......
  • 199. 二叉树的右视图(中)
    目录题目题解:BFS题目给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。题解:BFS用BFS,每一层最后一个弹出队列的元素加到结果列表里面classSolution:defrightSideView(self,root:Optional[TreeNode])->Lis......
  • 107. 二叉树的层序遍历 II(中)
    目录题目题解:BFS题目给你二叉树的根节点root,返回其节点值自底向上的层序遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)题解:BFS用BFS把每层的结点存在一个单独的列表里,最后翻转整个结果列表classSolution:deflevelOrderBottom(self,root:Op......
  • 103. 二叉树的锯齿形层序遍历(中)
    目录题目题解:BFS题目给你二叉树的根节点root,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。题解:BFS用BFS把每一层的结点存在一个列表里面,然后判断一下如果是偶数层就翻转列表,最后都加入结果列表返回即可classSo......
  • 二叉树
    一.二叉树的概念1.二叉树的性质二叉树的每个节点最多有两个子节点,分别称为左孩子和右孩子,以他们为根的子树称为左子树和右子树。二叉树的第i层最多有2^(i-1)个节点。如果每层的节点数都是满的,称他为满二叉树。图例:如果这个二叉树只是在最后一层有缺失,且......
  • 21_从中序与后序遍历序列构造二叉树
    106.从中序与后序遍历序列构造二叉树给定两个整数数组inorder和postorder,其中inorder是二叉树的中序遍历,postorder是同一棵树的后序遍历,请你构造并返回这颗二叉树。示例1:输入:inorder=[9,3,15,20,7],postorder=[9,15,7,20,3]输出:[3,9,20,null,null,15,7]......
  • 相同二叉树和镜面二叉树问题
    相同二叉树和镜面二叉树问题作者:Grey原文地址:博客园:相同二叉树和镜面二叉树问题CSDN:相同二叉树和镜面二叉树问题判断两棵树是否是相同的树题目描述见:LeetCode100.SameTree即:如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。比如:两个树结构完全一致,对......
  • Python算法——二叉树遍历
    Python中的二叉树遍历算法详解二叉树是一种常见的树状数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。遍历二叉树是访问树的所有节点并按照特定顺序输出它们的过程。在本文中,我们将讨论二叉树的三种主要遍历算法:前序遍历、中序遍历和后序遍历,并提供相应的Python代码......