java - 二叉搜索树中的重复项

标签 java binary-search-tree

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

我能想到:

  • 每个节点都有一个键和一个值数组,具有相同键的值位于该数组中
  • 每个节点都有一个已访问标志

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

最佳答案

听起来基本上您确实想要每个键的值列表,是的。那么添加到 map 的过程就是:

  • key 存在吗?
    • 如果是这样,请为现有列表添加值(value)。
    • 如果没有,请在树中的适当位置(照常)创建一个新节点,并从包含一个值的列表开始

迭代 map 时,您的一般模式是:

  • 生成左节点的所有值(较小的键)
  • 生成该节点的所有值 - (key, value1), (key, value2) 等
  • 生成右侧节点的所有值(较大的键)

当然,如果您不需要自己实现这个用于学习目的,您可以使用现成的多重映射,例如 GuavaTreeMultimap 。如果您为了自学而实现它,我会首先实现一个“正常”的二分搜索映射,然后从那里继续。

关于java - 二叉搜索树中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15448176/

相关文章:

algorithm - 为什么 B-Tree 用于文件系统?

data-structures - BST , Hashing , Tries 和 map 的区别

algorithm - 不能绕枢轴旋转

algorithm - 给定一个排序的整数数组,如何从中形成二叉搜索树?

java - 为接口(interface)中的默认方法编写 Junit 测试用例

Java Swing GUI : Text Wrap, 中心文本和自定义字体?

java - 是否可以通过反射调用私有(private)属性或方法

java - 使用 swing 代码获得意外的输出

java - 如何对这个类进行类型转换?

c - 我是否设法正确估计了 O(n)?