比较2个b树,看它们是否包含相同的值

时间:2013-01-31 14:51:44

标签: java algorithm b-tree

看到2 b树可能具有相同的值,但形状不同,是否有算法通过值并比较两个树是否具有相同的键?

关键是如果它们包含不同的密钥(尽快),就可以纾困。

除非你在我猜的同时在两个b-tree中执行查找,否则递归算法可能无法工作。

我已经看到遍历b树的算法,但我不想遍历两者,然后比较密钥,我想要更聪明的东西,如果存在差异,将尽早拯救。< / p>

基本上该函数返回true / false。

2 个答案:

答案 0 :(得分:2)

基本技术是以某种方式有一个对象,它表示有序遍历中的当前点。一旦你有两个,每个树的一个实例,你只需要为下一个键输入它们,并且第一次两个返回一个不同的下一个键,你就完成了。

在C#中,您使用yield return进行遍历,一次产生一个密钥,并跟踪它在树中的位置。然后,您可以将其中两个传递给SequenceEquals,一旦遇到第一个差异,它就会挽救。在Java中,您必须自己构建该机制,但这并不难。

答案 1 :(得分:0)

假设你的意思是b-tree,那么你需要做的就是一次迭代两次。迭代器之间的任何偏差都将证明它们的内容不同。如果没有在构建树时收集更多细节,你不可能找到比这更好的算法。

如果您不是在谈论被描述为的b-tree

  

... B树是一种树数据结构,保持数据排序,并允许以对数时间进行搜索,顺序访问,插入和删除。

然后你需要先对它进行排序然后遍历它。