Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 二元搜索树中的重复项_Java_Binary Search Tree - Fatal编程技术网

Java 二元搜索树中的重复项

Java 二元搜索树中的重复项,java,binary-search-tree,Java,Binary Search Tree,在二叉搜索树中处理重复项的优雅方式是什么?假设每个键都有几个不同的关联值。我需要做的是按顺序迭代所有值。所以,如果我有两个值A和B,键为1,一个值C,键为2,当调用类似TreeInterator.next()的东西时,我想得到两个对:(1,A),(1,B),(2,C) 我能想到: 每个节点都有一个键和一个值数组,其中包含具有相同键的值 每个节点都有一个已访问标志 还有其他建议吗?一般来说,我希望树实现尽可能抽象。听起来基本上您确实需要每个键的值列表,是的。因此,添加到地图的过程是: 钥匙存

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

我能想到:

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

还有其他建议吗?一般来说,我希望树实现尽可能抽象。

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

  • 钥匙存在吗?
    • 如果是,则向现有列表添加值
    • 如果没有,请在树中的适当点(正常情况下)创建一个新节点,并从一个值列表开始
在地图上迭代时,您的常规模式为:

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

当然,如果您不需要为了学习目的自己实现这个,您可以使用现成的multimap,例如。如果你是为了自我教育而实现它,我会先实现一个“普通”的二进制搜索映射,然后从那里开始。

你所说的“处理”是什么意思?你想代表他们还是接受他们?为什么您需要一个键和一个值数组?如果值都相同,为什么不在该节点中逻辑地保留一个值数的计数?添加了更多说明。很抱歉。