這是一個12年級的作業。其中一個問題要求我們在BTree類中編寫一個採用一個BNode或一個整數的方法,並從該樹中刪除該節點。需要幫助刪除二叉查找樹節點
這是我已經試過:
public void delete(BNode b){
if(b==null){
return;
}
if(b.getLeft()==null && b.getRight()==null){
b = null;
}
else{
//System.out.println("boiboi");
BNode tmp = b;
b = null;
add(tmp.getLeft());
add(tmp.getRight());
tmp = null;
}
}
public void delete(int v){
//System.out.println("gord");
delete(find(v));
}
這裏的,我認爲是正確的添加和尋找方法:
public BNode find(int v){
return find(v, root);
}
public BNode find(int v, BNode branch){
if(branch == null || branch.getVal() == v){
return branch;
}
if(v<branch.getVal()){
return find(v, branch.getLeft());
}
else{//else if(v>branch.getVal())
return find(v, branch.getRight());
}
}
public void add(int v){
if(root == null){
root = new BNode(v);
}
else{
add(v, root);
}
}
public void add(int v, BNode branch){
if(v == branch.getVal()){
return;
}
if(v<branch.getVal()){
if(branch.getLeft() == null){
branch.setLeft(new BNode(v));
}
else{
add(v, branch.getLeft());
}
}
else{
if(branch.getRight() == null){
branch.setRight(new BNode(v));
}
else{
add(v, branch.getRight());
}
}
}
public void add(BNode n){
if(n==null){
return;
}
add(n.getVal());
}
這裏是我的測試類:
BTree bTree = new BTree();
bTree.add(50);
bTree.add(60);
bTree.add(40);
bTree.add(35);
bTree.add(55);
bTree.add(45);
bTree.add(51);
bTree.delete(60);
bTree.display();
的輸出仍然是我添加的所有內容:35 40 45 50 51 55 60 即使我試圖刪除51,最簡單的情況下,仍然是相同的產出。 任何幫助或建議,將不勝感激,謝謝。
B節點b是[參考](http://way2java.com/oops-concepts/reference-variables-anonymous-objects/)。 b = null不會修改節點的VALUE,只需將空引用賦給b。你有修改家長的左/右參考。如果它是根目錄,則修改根引用。 – iamsleepy 2013-03-27 03:52:23
謝謝,我想我明白你在說什麼。 – 2013-03-27 03:58:52