社区
数据结构与算法
帖子详情
如何求二叉树2个节点的最近共同祖先节点?
icecools
2006-09-28 07:36:01
如下树,找出2个任意节点的最近的公共祖先节点
10
/ \
6 15
/ \ / \
3 8 12 18
/ / \
1 7 9
/
8.5
例如:1和7的最近公共祖先节点是6, 7和8.5的最近公共祖先是8,大家有什么好的算法或者思路吗?最好是O(N)的,谢谢!
...全文
1121
11
打赏
收藏
如何求二叉树2个节点的最近共同祖先节点?
如下树,找出2个任意节点的最近的公共祖先节点 10 / \ 6 15 / \ / \ 3 8 12 18 / / \ 1 7 9 / 8.5 例如:1和7的最近公共祖先节点是6, 7和8.5的最近公共祖先是8,大家有什么好的算法或者思路吗?最好是O(N)的,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dengsf
2006-09-29
打赏
举报
回复
LZ没保证树是平衡的,所以楼上的只对最理想情况才有效。
可考虑并查集。
weijiangshanwww
2006-09-29
打赏
举报
回复
找出2个任意节点的最近的公共祖先节点,而且还需要O(n)的算法。
一般来说就是牺牲空间换取时间。或者牺牲时间换取空间。
(个人观点)
1:牺牲空间换取时间。
在结点信息中增加成员变量。(深度值,和在该深度上的序号。即:从左往右第几位)
然后在寻找共同最近的祖先时候,可以按照成员变量的值,进行搜索。而且效率〈o(n)
2:牺牲时间换取空间。
不附加任何信息。
遍历一次。
从要求的结点开始。一直往上,记录下所有遍历的祖先结点。每往上走一次就把得到的两个结合求交。直到根结点结束。
fflush
2006-09-28
打赏
举报
回复
哦,误会了,这个节点里可以有个指针指向父节点
但是要全部取出来的话第一要动态申请数组,第二2个数组比较的时候还是O(N*N)的时间复杂度,不知道有没有什么好的算法可以快一点
-------------------------------------------
向上取出所有的祖先节点,这个只需要logn的空间,因此两边比较也只需要logn * logn的时间,这个比O(n)还要低,基本上不能更好了
icecools
2006-09-28
打赏
举报
回复
关键是2边不能一起上溯
icecools
2006-09-28
打赏
举报
回复
楼上这个方法不行,比如图示的3和8.5的结果应该是6,但是你求不出来的
Riemann
2006-09-28
打赏
举报
回复
O(N)的,代码大致如下:
nodetype* comm(nodetype* n1, nodetype* n2)
{
if (n1->parent == n2)
return n2
else if (n2->parent == n1)
return n1
else
return comm(n1->parent, n2->parent);
}
icecools
2006-09-28
打赏
举报
回复
哦,误会了,这个节点里可以有个指针指向父节点
但是要全部取出来的话第一要动态申请数组,第二2个数组比较的时候还是O(N*N)的时间复杂度,不知道有没有什么好的算法可以快一点
zzwu
2006-09-28
打赏
举报
回复
问题是,2个节点本身的位置还未知,如何求它们的上辈结点?
icecools
2006-09-28
打赏
举报
回复
位置是随意的,可不可以先把2个节点的祖先节点都求出来然后再求交集?
zzwu
2006-09-28
打赏
举报
回复
如果预先未知道两个结点在树中的位置,那只能从根结点开始,搜索整个树.
zzwu
2006-09-28
打赏
举报
回复
被考察的两个节点预先是如何给出的?
Python 1-01 开发环境搭建
一、自定义鼠标右击菜单 注册文件:mycom.reg Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background\shell\mycmd] @="命令提示符" "Icon"="c:\\windows\\system32\\cmd.exe" [HKEY_CLASSES_ROOT\Directory\Background\shell\mycmd\command] @="c:\\windows\\system32
1.1 安装Python——Python开发环境的搭建
1.1 安装Python——Python开发环境的搭建 在正式学习Python编程之前,要先安装Python,这包括“标准Python”、“第三方Python包”、“Python程序开发的IDE”、“Python代码编辑器”。在正式开始本文之前,小编先解释一下IDE和代码编辑器的概念及其区别: IDE,全称是Integrated Development Environment ,即集成开发环境...
树莓派python编程环境搭建_树莓派OpenCV系列教程1:开发环境搭建
本章将介绍OpenCV开发环境的搭建,搭建的版本为OpenCV4.1.0,同时支持Python3和C++,在搭建好后,将通过一个C++和Python的Demo打开CSI摄像头来测试开发环境是否搭建完成。1 烧录系统本教程采用的镜像是树莓派官方2019年7月10日发布的发行版镜像,代号Buster,如下图所示:2 基本设置2.1 把目录扩展到整个TF卡本次搭建OpenCV开发环境,至少选择16G的T...
折腾kali2020.1:(二)python开发环境搭建
折腾kali2020.1:(二)python开发环境搭建 1、easy_install无法使用 明明安装了python-setuptools ,但是easy_install就是找不到这条命令!!!
关于 VTK 7.1.0 + python3.X 的 pycharm 开发环境的搭建
在此记录一下关于关于 VTK 7.1.0 + python3.X 的 pycharm 开发环境的搭建中碰到的问题...
数据结构与算法
33,025
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章