二叉树结点公共祖先 <O(logn)求解>
来源:互联网 发布:穷养儿富养女知乎 编辑:程序博客网 时间:2024/06/05 23:56
一个顺序存储的完全二叉树:
1
/ \
2 3
/ \ / \
4 5 6 7
...
任意给定两结点的编号,求两结点最近的公共祖先。
每组数据一行,为空格隔开的两个数i和j,皆为32位有符号正整数
每组数据对应一行,为编号为i和j的结点的最近公共祖先的编号
4 54 7
21
完全二叉树,思路很简单,我们先让大的数向小的数靠拢,一直减小到两个数在树的同一层
然后两个数一起往上找祖先,找到相同的就退出循环,因为任意两个数的最远的祖先一定是1,所以不用担心找不到死循环的可能
#include <iostream>#include <cstring>#include <stack>#include <cstdio>#include <cmath>#include <queue>#include <algorithm>#include <vector>#include <set>#include <map>const double eps=1e-8;const double PI=acos(-1.0);using namespace std;int main(){ int n,m; while(~scanf("%d %d",&n,&m)){ if(n>m) swap(n,m); while((int)log2(m)!=(int)log2(n)){//一直缩减到同一层 m/=2; } while(m!=n){//同时向上找祖先 m/=2; n/=2; } printf("%d\n",n); } return 0;}
阅读全文
0 0
- 二叉树结点公共祖先 <O(logn)求解>
- 二叉树结点公共祖先
- CSU - 1213 二叉树结点公共祖先
- A: 二叉树结点公共祖先
- ACM:A: 二叉树结点公共祖先
- 二叉树两结点的最低公共祖先结点(一)
- 二叉搜索树两结点最低公共祖先结点
- 二叉树两结点最低公共祖先结点(二)
- 习题6.15查找二叉树结点公共祖先
- 二叉树两个结点的最低公共祖先
- 二叉树两个结点的最低公共祖先
- 二叉树中两个结点的最低公共祖先
- 满二叉树中任意两个结点的公共祖先
- 求二叉树中两个结点的最近公共祖先
- 设计算法查找二叉树的两个结点最近公共祖先(LCA)
- 二叉树-公共祖先
- 求解二叉树中两个节点的最近公共祖先(LCA)
- 二叉树中找两个结点的最近公共祖先结点
- sublime将python的运行结果在命令行显示
- String转换大小写和去空格
- Numpy——将二维图像矩阵转换为一维向量
- FFmpeg+Qt实现摄像头(rtsp)实时显示
- 基于Python检索系统(4)最终版
- 二叉树结点公共祖先 <O(logn)求解>
- 在UCloud云主机上安装Python3和pip
- Java设计模式-适配器模式和装饰模式
- 石像鬼(Gargoyle)1.8.1 ar71xx SS + pdnsd 实现代理
- 一个mongodb的备份脚本
- <machine_learning>_Regression
- 视频截点上传
- CryEngine ViewMat
- 从webshell开始的内网入侵