当前位置: 首页 > news >正文

AcWing 3555:二叉树(北京大学考研机试题)→公共父结点

【题目来源】
https://www.acwing.com/problem/content/description/3435/

【题目描述】
如下图所示,由正整数 1, 2, 3, … 组成了一棵无限大的(满)二叉树。

     1/ \2   3/ \ / \4  5 6  7
/\ /\ /\ /\
...     ... 

从任意一个结点到根结点(编号是 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)。

【数据范围】
1≤x, y≤2^31−1

【输入格式】
一行,两个整数,空格隔开,表示两个结点。

【输出格式】
一行,一个整数,表示公共结点。

【输入样例】
10 4

【输出样例】
2

【算法分析】
对于一个二叉树,定义当前节点的编号为 i(从 1 开始),那么它的左子节点为 2*i,右子节点是2*i+1。故寻找两个节点的公共父节点,可以让其分别除以2,直到两个节点指向同一个位置。
时间复杂度为O(log_2N)

【算法代码】

#include<bits/stdc++.h>
using namespace std;int x,y;
int main() {cin>>x>>y;while(true) {if(x>y) x/=2;else if(y>x) y/=2;else break;}cout<<x<<endl;return 0;
}/*
in:
10 4out:
2
*/




【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/131620651
https://www.acwing.com/solution/content/126489/
https://www.acwing.com/solution/content/126493/

 

相关文章:

  • PRCD-1229 : An attempt to access configuration of database
  • String转Date,Date转String
  • Python 潮流周刊#29:Rust 会比 Python 慢?!
  • 腾讯云双十二优惠活动有哪些?详细攻略来了!
  • Docker 安装部署 Sentinel Dashboard
  • enable_shared_from_this使用介绍
  • 【征稿倒计时十天,ACM独立出版,有确定的ISBN号,ei检索稳且快】
  • 时间序列数据压缩算法简述
  • SocialSelling社交销售1+5+1方法论系列:社交销售价值何在
  • 新手村之SQL——函数多表联结
  • 阿里云效一键部署前后端
  • 第十五届蓝桥杯模拟赛(第二期 C++)
  • 好用的挂耳式蓝牙耳机有哪些?分享几款热门好用的蓝牙耳机
  • C++-模板
  • Excel 分列功能
  • AHK 中 = 和 == 等比较运算符的用法
  • angular学习第一篇-----环境搭建
  • cookie和session
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • MobX
  • mysql_config not found
  • Spring-boot 启动时碰到的错误
  • SpringBoot 实战 (三) | 配置文件详解
  • yii2权限控制rbac之rule详细讲解
  • 复杂数据处理
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 排序(1):冒泡排序
  • 前端技术周刊 2019-01-14:客户端存储
  • 线上 python http server profile 实践
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 在Unity中实现一个简单的消息管理器
  • 组复制官方翻译九、Group Replication Technical Details
  • #Linux(Source Insight安装及工程建立)
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (07)Hive——窗口函数详解
  • (arch)linux 转换文件编码格式
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (九十四)函数和二维数组
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四) Graphivz 颜色选择
  • (四)Linux Shell编程——输入输出重定向
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Linux整合apache和tomcat构建Web服务器
  • ***详解账号泄露:全球约1亿用户已泄露
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net web项目 调用webService
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net6 webapi log4net完整配置使用流程
  • .net和php怎么连接,php和apache之间如何连接
  • .pyc文件是什么?
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术