0

クラスで、遅延削除を使用して BST を実装する課題があります。ノードが削除されると、削除済みとしてフラグが立てられるだけで、実際にツリーから削除されるわけではありません。ツリーで削除済みとしてフラグが付けられたすべてのノードを実際にハード削除したい場合のメソッドを作成する必要があります。

現在、ツリーを再帰する delete() メソッドを使用しています。削除済みのフラグが立てられたノードが見つかった場合、すべての削除メカニズムを使用して removeHard() を呼び出します。私は delete() メソッドをテストしましたが、ツリーを正しくトラバースしているようで、マークされたすべてのノードをキャッチしてから、 removeHard() メソッドに渡します。また、テストとしてメイン メソッドで 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;
}
4

0 に答える 0