我有两个BST由具有唯一ID的元素组成。我想找到这些BST的共同元素。
最简单的方法是逐个获取第一个BST的元素,并针对第二个BST检查它们。但由于我必须重复这个比较数十倍的时间,我正在寻找最快的算法。
答案 0 :(得分:1)
假设您的两棵树的大小分别为 m 和 n 。您提出的解决方案可以及时工作Θ(n log(m))(或者相反)。你实际上可以及时做到这一点Θ(m + n)。
让我们从相关问题开始。假设您有两个列表,每个列表的大小分别为 m 和 n 。您可以在Θ(m + n)中轻松找到公共元素的数量。只需放置两个“指针”,每个列表一个。通过比较这两个项目,您可以确定是否增加第一个指针,第二个指针或两者(最后一种情况是找到相同的元素)。 (修改 - 您可以在this question的答案中看到这一点。)
BST的有序遍历在概念上与遍历已排序的链表相同,因此您可以在此处执行相同的操作。
答案 1 :(得分:1)
您可以对一个BST进行遍历(pre-or,in-或after-order),并将节点的值存储在哈希表中。然后遍历另一棵树,并在遇到的每个节点的哈希表中增加相应的值。哈希表中值大于1的任何值都是与二叉搜索树相同的值。