Java如何删除可融合堆中的节点

Java如何删除可融合堆中的节点,java,heap,Java,Heap,如何从可融合堆中移除特定节点?我知道如何删除根节点,然后合并左右节点。我不知道如何找到一个特定的节点,删除它,并修复剩余的节点。如有任何建议,将不胜感激。谢谢< p>当你删除堆中间的一个节点时,你首先要做的是更新父节点,这样父节点就不再指向被删除的节点。实际上,现在有两个堆:原始堆和根在要删除的节点上的子堆 然后,在第二个堆(根在要删除的节点上的堆)中,调用remove。这将删除最小的项,即要删除的节点,并修复堆 最后,将第二个堆与主堆合并 最困难的部分是找到要删除的节点。这需要遍历树结构,检查

如何从可融合堆中移除特定节点?我知道如何删除根节点,然后合并左右节点。我不知道如何找到一个特定的节点,删除它,并修复剩余的节点。如有任何建议,将不胜感激。谢谢

< p>当你删除堆中间的一个节点时,你首先要做的是更新父节点,这样父节点就不再指向被删除的节点。实际上,现在有两个堆:原始堆和根在要删除的节点上的子堆

然后,在第二个堆(根在要删除的节点上的堆)中,调用
remove
。这将删除最小的项,即要删除的节点,并修复堆

最后,将第二个堆与主堆合并

最困难的部分是找到要删除的节点。这需要遍历树结构,检查每个节点的密钥

如果要避免顺序扫描,必须创建一个单独的数据结构,例如将密钥映射到堆节点的哈希映射。通常,您会有一个包装器数据结构。类似于下面的内容,但请原谅语法。Java不是我的强项:

class IndexableHeap
{
    MeldableHeap theHeap;
    HashMap<key, Node> index

    void add(node)
    {
        theHeap.add(node);
        index.add(node.x, node);
    }

    remove()
    {
        theHeap.remove(node);
        index.remove(node.x);
    }
}
类索引堆
{
熔化堆;
哈希映射索引
无效添加(节点)
{
heap.add(节点);
添加(node.x,node);
}
删除()
{
heap.remove(节点);
删除(node.x);
}
}

我想你明白了。

你是否有链接到可融合堆代码,或者有文章描述你正在使用的实现?没有这些,我们就不可能提出建议。和