首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找两个二进制搜索树的公共元素的最佳方法

查找两个二进制搜索树的公共元素的最佳方法
EN

Stack Overflow用户
提问于 2016-12-02 10:31:54
回答 2查看 1.3K关注 0票数 2

我有两个BST,由具有唯一ids的元素组成。我想找到这些BSTs的共同元素。

最简单的方法是一个接一个地得到第一个BST的元素,并根据第二个BST检查它们。但是由于我不得不重复这个比较数以百万计的次数,我正在寻找最快的算法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-02 10:56:45

假设你的两棵树分别是m和n。您建议的解决方案在timeΘ(n log(m))中工作(或者相反)。您实际上可以在时间Θ(m + n)中这样做。

让我们从一个相关的问题开始。假设您有两个大小分别为m和n的列表,每个列表都进行了排序。您可以很容易地在Θ(m + n)中找到公共元素的数量。只需放置两个“指针”,每个列表一个。通过比较这两个项,您可以确定是增加第一个指针、第二个指针,还是同时增加两个指针(最后一个情况是找到相同的元素时)。(编辑--您可以在this question的答案中看到这一点。)

BST的顺序遍历在概念上与对排序链接列表的遍历相同,因此您可以在这里进行相同的遍历。

票数 2
EN

Stack Overflow用户

发布于 2017-05-03 22:15:37

您可以对一个BST进行遍历(前、内或后序),并将节点的值存储在哈希表中。然后遍历另一棵树,并为遇到的每个节点在哈希表中增加相应的值。哈希表中值大于1的任何值都是与两个二进制搜索树相同的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40930058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档