クラスIでは、ノードを追加/削除し、すべてのノードを特別な方法で出力することができるAVLTreeを作成することになりました。私はこれを達成した。 Eveyrthingはローカルコンピュータで正常に動作します。しかし、コードをオンライン提出サーバーにアップロードし、コマンドライン入力でそれをテストすると、私の機能の1つが機能しなくなり、誰かが理由を説明できると思っていました。ここでAVLTreeノードの削除
は私のコンピュータ上の私の主な方法である:ここでは
AVLTree avl = new AVLTree();
avl.insert(5, "earl");
avl.insert(3, "colin");
avl.insert(6, "fiona");
avl.show();
avl.insert(2, "bonnie");
avl.insert(4, "danielle");
avl.show();
avl.insert(1, "alex");
avl.show();
avl.delete("bonnie");
avl.delete("alex");
avl.show();
は私が
public static void main(String[] args) throws FileNotFoundException{
Scanner input = new Scanner(new File(args[0]));
String name = new String();
int key = 0;
AVLTree avl = new AVLTree();
while (input.hasNext()) {
String opt = input.next().toUpperCase();
switch(opt)
{
case "INSERT":
name = input.next();
key = input.nextInt();
avl.insert(key, name);
break;
case "REMOVE":
name = input.next();
System.out.println("***" + avl.search(name));//this is where the problem is. On the server it returns null, on my computer it returns the correct node
avl.delete(name);
break;
case "SHOW":
avl.show();
break;
}
}
}
}
コマンドライン入力のために使用していますメインは2で異なる第二のmainメソッドがあるから私はコンピュータ上でコマンドラインを使用していないので、コンピュータのバージョンに入力ファイルをコピーし、手動ですべてを入力しました。ここ
最後に、ここで入力ファイル
insert Earl 5
insert Colin 3
insert Fiona 6
show
insert Bonnie 2
insert Danielle 4
show
insert Alex 1
show
remove Bonnie
remove Alex
show
ある機能は、ノードを除去するために必要です。
public boolean delete(String name) {
Node target = search(name);
if (target == null) return false;
target = deleteNode(target);
balanceTree(target.parent);
return true;
}
private Node deleteNode(Node target) {
if (isLeaf(target)) { //leaf
if (isLeftChild(target)) {
target.parent.left = null;
} else {
target.parent.right = null;
}
} else if (target.left == null^target.right == null) { //exact 1 child
Node nonNullChild = target.left == null ? target.right : target.left;
if (isLeftChild(target)) {
target.parent.setLeftChild(nonNullChild);
} else {
target.parent.setRightChild(nonNullChild);
}
} else {//2 children
Node immediatePredInOrder = immediatePredInOrder(target);
target.value = immediatePredInOrder.value;
target = deleteNode(immediatePredInOrder);
}
reHeight(target.parent);
return target;
}
public Node search(String name) {
return binarySearch(root, name);
}
private Node binarySearch(Node node, String name) {
if (node == null)
return null;
if (name == node.name)
return node;
else {
Node foundNode = binarySearch(node.left, name);
if(foundNode == null) {
foundNode = binarySearch(node.right, name);
}
return foundNode;
}
}
問題は、検索機能がサーバーのバージョンでノードを見つけることができず、理由を特定できないことです。
はまた、ここでは出力
Local Version
earl 5
colin 3
fiona 6
earl 5
colin 3
bonnie 2
danielle 4
fiona 6
colin 3
bonnie 2
alex 1
earl 5
danielle 4
fiona 6
***bonnie 2//the println statement for search
earl 5
colin 3
Server Version
Earl 5
Colin 3
Fiona 6
Earl 5
Colin 3
Bonnie 2
Danielle 4
Fiona 6
Colin 3
Bonnie 2
Alex 1
Earl 5
Danielle 4
Fiona 6
***null//search println
***null//search println
Colin 3
Bonnie 2
Alex 1
Earl 5
Danielle 4
Fiona 6
danielle 4
fiona 6