0

二分探索ツリーの削除メソッドを書いていますが、完全ではありませんが、削除したいノードが葉である場合を少なくともテストできるように、ツリーを埋めましたが、そうではないようです働く。私のロジックに明らかなエラーはありますか?

public void delete(E d)
{
    delete( d, root);
}

private void delete( E d, Node<E> T)
{
    if(T == null)
    {
        return;
    }
    else if(d.equals(T.getData()))
    {
        System.out.println("it found the node at least");
        if(T.getRight() == null && T.getLeft() == null)
        {
            T.setData(null);
        }
        //do alot)
    }
    else if(d.compareTo(T.getData()) > 0)
    {
        System.out.println("going right");
        delete(d, T.getRight());
    }
    //s is less than T, insert on left subtree
    else
    {System.out.println("going left");
        delete(d,T.getLeft());
    }

}  
4

1 に答える 1

0

コードはノードを削除しません。それらをクリアするだけです。
削除を実装するには、関数を無効にし ないように変更する必要がありますが、次のようにします。

private Node delete( E d, Node<E> T)

コードは次のようになります。

public void delete(E d) {
    root = delete( d, root);
}

private void delete( E d, Node<E> T)
{
    if(T == null)
    {
        return;
    }
    else if(d.equals(T.getData()))
    {
        System.out.println("it found the node at least");
        if(T.getRight() == null && T.getLeft() == null)
        {
           return null;
        }
        //do alot)
    }
    else if(d.compareTo(T.getData()) > 0)
    {
        System.out.println("going right");
        T.right = delete(d, T.getRight());
    }
    //s is less than T, insert on left subtree
    else
    {
        System.out.println("going left");
        T.left = delete(d,T.getLeft());
    }

}  

あなたはアイデアを得る...

于 2015-07-03T20:04:19.967 に答える