0
public void removeNode(int data) {
deleteNode(root, data);
}
public Node deleteNode(Node focus, int data) {
if(focus == null) {
System.out.println("Tree empty");
return null;
}
else if(data < focus.data) {
deleteNode(focus.leftchild, data);
}
else if(data > focus.data) {
deleteNode(focus.rightchild, data);
}
else {
// No child
if(focus.leftchild == null && focus.rightchild == null) {
focus = null;
}
// one child
else if(focus.leftchild == null) {
focus = focus.rightchild;
System.out.println("here");
}
else if(focus.rightchild == null) {
focus = focus.leftchild;
}
// 2 children
else {
Node temp = findMin(focus.rightchild);
focus.data = temp.data;
deleteNode(focus.rightchild, temp.data);
}
}
return focus;
}
public Node findMin(Node focus) {
while(focus.leftchild != null) {
focus = focus.leftchild;
}
return focus;
}
バイナリ検索ツリーでノードを削除するために上記のコードを記述しました。しかし、何らかの理由ですべてのノードを印刷するためにpreordertraversal関数を実行すると、ノードが削除されていないことがわかります。誰かがなぜノードが削除されていないのか教えてください。その機能は正しいと思われる。バイナリツリー削除ノード機能が動作しません。
'focus = null'または' focus = focus.rightchild'はノード 'focus'を削除しません。この関数にのみ存在する変数 'focus'を別のノード(または' null')にするだけです。代わりに、ノードの親変数**の変数を別の値に設定する必要があります。 –
よろしく!それを試みます。ありがとうございました! –