2013-03-01 340 views
0

我正在寫一個二叉搜索樹的刪除方法,它不是完整的,但我填充了一棵樹,這樣我至少可以測試我想刪除的節點是葉的情況但它似乎並沒有工作。我的邏輯中有任何明顯的錯誤?Java二叉搜索樹刪除

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()); 
    } 

} 
+0

究竟是什麼//做很多)? – NPE 2013-03-01 08:06:58

+1

另外,將'data'設置爲'null'並不是我所說的刪除操作。 – NPE 2013-03-01 08:07:47

+0

做了很多意味着代碼的其餘案件。以及如何刪除它? – alexthefourth 2013-03-01 08:08:56

回答

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()); 
    } 

} 

你的想法..