削除するノードがノードである場合に取り組んでいます。親を追跡する必要があるかどうかはわかりません。そのため、削除するノードが見つかったときに、その親ポインターを null に設定できます。しかし、削除するノードがどの子であるかをどのように知ることができますか? さらに if ステートメントが必要ですか?
助けていただければ幸いです。それほど複雑ではないと思いますが、実際にノードを削除する方法について混乱しています。
これは私がこれまでに持っているものです:
public void insert(E s)
{
root = insert(s, root);
}
private Node<E> insert(E s, Node<E> T)
{
//easiest case, empty tree, create new tree
if(T == null)
{
T = new Node<E>(s);
}
//easiest case, found s
else if(s.compareTo(T.getData()) == 0)
{
System.out.println("Item already present.");
}
//s is greater than T, insert on right subtree
else if(s.compareTo(T.getData()) > 0)
{
T.setRight(insert(s, T.getRight()));
}
//s is less than T, insert on left subtree
else
{
T.setLeft(insert(s,T.getLeft()));
}
return T;
}
public void delete(E d)
{
delete( d, root);
}
private void delete( E d, Node<E> T)
{
if(T == null)
{
}
else if(d.equals(T.getData()))
{
System.out.println("it found the node at least");
if(T.getRight() == null && T.getLeft() == null)
{
}
//code other cases for a node with one child and node with two children
}
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());
}
}