从平衡二进制树中删除多个项目

时间:2013-07-14 01:32:24

标签: algorithm data-structures binary-search-tree tree-balancing

我在项目(Java的TreeMap)上使用带有链接叶子的红黑二叉树,以快速查找和遍历项目。问题是我可以轻松地在树上获得35000个左右的项目,有几次我必须删除“X以上的所有项目”,这几乎可以是整个树(就像30000个项目一样,因为它们都更大比X),每次都需要花费太多时间来删除它们并重新平衡树。

有没有可以帮助我的算法(所以我可以自己创建树)?

1 个答案:

答案 0 :(得分:2)

你正在寻找红色/黑色树上的拆分操作,它采用红色/黑色树和一些值k并将其分成两个红色/黑色树,一个带有所有键大于或等于k和一个小于k的所有键。如果您扩充结构以存储一些额外信息,则可以在O(log n)时间内实现。在您的情况下,由于您使用的是Java,因此您可以拆分树并丢弃您不关心的树的根,以便垃圾收集器可以处理它。

有关如何实现这一点的详细信息在this paper中给出,从第9页开始。它是根据 catenate (或 join )操作实现的结合了两棵树,但我认为展览非常清楚。

希望这有帮助!