2013-04-13 275 views
-1

http://www.cs.arizona.edu/~mercer/Projects/BSTRemoveGeneric.pdf從刪除節點二叉搜索樹

我有編碼這個麻煩! 我不知道爲什麼這不起作用!它讓我瘋狂! 刪除OrderedSet的方法。 這是我的代碼

public boolean remove(E element) 
{ 
    if(root == null) 
    { 
     return false; 
    } 
    if(!contains(element)) 
    { 
     return false; 
    } 
    else if(root.data.equals(element) && root.left != null) 
    { 
     root = root.left; 
     return true; 
    } 
    //return remove(element, root); 
    else 
    { 
     TreeNode curr = root; 
     TreeNode prev = root; 
     while(element.compareTo(curr.data) != 0 && curr != null) 
     { 
      prev = curr; 
      if(element.compareTo(curr.data) < 0) 
      { 
       curr = curr.left; 
      } 
      else// if(element.compareTo(curr.data) > 0) 
      { 
       curr = curr.right; 
      } 
     } 
     if(curr.left == null) 
     { 
      if(curr == prev.left) 
      { 
       prev.left = curr.right; 
      } 
      else// if(curr == prev.right) 
      { 
       prev.right = curr.right; 
      } 
      return true; 
     } 


     else// if(curr.left != null) 
     { 
      OrderedSet<E> temp = new OrderedSet<E>(); 
      temp.root = curr.left; 
      System.out.println("\n\n\n\n" + curr.data + "\n" + prev.data + "\n" + temp.toStringInorder() + "\n" + temp.max() + "\n\n\n\n"); 
      curr.data = temp.max(); 
      TreeNode ref = curr; 
      while(curr.right != null) 
      { 
       ref = curr; 
       curr = curr.right; 
      } 
      ref = ref.left; 
      return true; 
     } 
    } 

錯誤:

調用相交之後插入G A dÇ

失敗大小後刪除( 「G」)後失敗。

無法刪除根節點時根節點已離開兒童(

失敗的十字路口時都具有三個相同的元件

失敗刪除根與多至

失敗後去掉右插入(「M」);插入(「G」);刪除(「M」);

您是否使用'=='而不是'equals'?insert(new Integer(50))插入(新整數(75));刪除(新整數(50));

除去在

失敗尺寸

+0

確切的錯誤是什麼?這麼少的信息是不可能的。 – acdcjunior

+0

插入G A後刪除(「G」)後失敗C 調用交叉點後失敗大小。 無法刪除根節點時根節點已離開兒童( 失敗的十字路口時都具有三個相同的元件的 失敗刪除根與多至 失敗插入物(「M」)後除去的權利;插入(「G」);刪除(「M」);刪除(「M」); 您是否使用'=='而不是'equals'?insert(new Integer(50)); insert(new Integer(75)); remove (新Integer(50)); 刪除期間失敗的大小(出現2次) (只顯示9個提示中的8個) –

+0

對不起,但這還不夠,您給我們發送來自外部的錯誤消息您要發佈的電子郵件代碼。 Afaik,這個錯誤可能不在你所提供的代碼的這一部分。 – acdcjunior

回答

0

確定(僅9個所示的提示8)你想有以下

f(!contains(element)) 
{ 
    return false; 
} 

考慮這樣的情況(2次),其中元件你正在移除存在於樹中,這意味着你正在做這個額外的計算。

Here's一些代碼,我寫了很久以前。警告:它非常長 - 大部分是多餘的。

+0

我已經有了這個方法。在整個java文件中,這只是它的一部分。 –