二进制搜索树中的重复项

时间:2013-03-16 10:32:09

标签: java binary-search-tree

在二进制搜索树中处理重复项的优雅方法是什么?假设每个键都有几个不同的值相关联。我需要做的是按顺序迭代所有值。因此,如果我有2个值A和B的密钥1,以及一个值C的密钥2,我想得到对:(1,A),(1,B),(2,C),当调用类似的东西时TreeIterator.next();

我能想到:

  • 每个节点都有一个键,以及一个值数组,其中具有相同键的值为
  • 每个节点都有一个visited标志

还有其他建议吗?作为一般准则,我希望Tree实现尽可能抽象。

1 个答案:

答案 0 :(得分:1)

听起来基本上你想要每个键的值列表,是的。因此,添加到地图的过程是:

  • 密钥存在吗?
    • 如果是,请将值添加到现有列表中。
    • 如果没有,请在适当的位置(正常情况下)在树中创建一个新节点,并以一个值的列表开头

在迭代地图时,您的一般模式是:

  • 从左侧节点(较小的键)
  • 生成所有值
  • 产生此节点的所有值 - (键,值1),(键,值2)等
  • 从右侧节点(较大的键)产生所有值

当然,如果您不需要为实现学习目的而自行实现此功能,则可以使用现成的多重映射,例如GuavaTreeMultimap。如果你 实施它以进行自我教育,我首先要实施一个“普通”二进制搜索地图,然后从那里开始。