用懒惰删除硬删除BST中节点的方法

时间:2014-05-09 03:25:00

标签: java binary-search-tree soft-delete

我在课堂上有一项任务,我们正在实施一个带有延迟删除的BST。删除节点后,它只会被标记为已删除,并且实际上不会从树中删除。当我们想要实际硬删除树中标记为已删除的所有节点时,我们必须为该情况创建一个方法。

现在我正在使用一个方法delete()来递减树。如果它发现标记为已删除的节点,则调用removeHard(),其中包含所有删除机制。我测试了delete()方法,我似乎正在遍历树并捕获所有标记的节点,然后传入我的removeHard()方法。另外,当我在我的main方法中公开调用removeHard()作为测试时,它会正确地删除节点。结合它要么根本不删除节点,要么创建重复。

protected void delete( FHlazySTNode<E> root )
{
  if ( root == null )
     return;

  if ( root.rtChild != null )
     delete(root.rtChild);
  if (root.deleted)
     removeHard(root);
  if ( root.lftChild != null )
     delete(root.lftChild);

}

   protected FHlazySTNode<E> removeHard( FHlazySTNode<E> root )
{

  if (root == null)
     return null;

  if (root.lftChild != null && root.rtChild != null)
  {
     root.data = findMin(root.rtChild).data;
     root.deleted = findMin(root.rtChild).deleted;
     root.rtChild = removeHard(root.rtChild);
  }
  else
  {
     root =
        (root.lftChild != null)? root.lftChild : root.rtChild;
  }
  return root;
}

0 个答案:

没有答案