繁体   English   中英

二叉搜索树中的重复项

[英]Duplicates in a Binary Search Tree

在二进制搜索树中处理重复项的一种优雅方法是什么? 假设每个键将具有多个不同的值。 我需要做的是依次遍历所有值。 因此,如果我在键1上有两个值A和B,在键2上有一个值C,我想在调用类似以下内容时获得对:(1,A),(1,B),(2,C) TreeIterator.next();

我可以想到:

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

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

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

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

遍历地图时,您的一般模式是:

  • 从左节点产生所有值(较小的键)
  • 产生此节点的所有值-(key,value1),(key,value2)等
  • 从右节点产生所有值(较大的键)

当然,如果您不需要出于学习目的自己实现此功能,则可以使用现成的多图,例如GuavaTreeMultimap 如果要实现它自我教育,我会通过实施“正常”的二进制搜索地图,然后从那里上开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM