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));
除去在失敗尺寸
確切的錯誤是什麼?這麼少的信息是不可能的。 – acdcjunior
插入G A後刪除(「G」)後失敗C 調用交叉點後失敗大小。 無法刪除根節點時根節點已離開兒童( 失敗的十字路口時都具有三個相同的元件的 失敗刪除根與多至 失敗插入物(「M」)後除去的權利;插入(「G」);刪除(「M」);刪除(「M」); 您是否使用'=='而不是'equals'?insert(new Integer(50)); insert(new Integer(75)); remove (新Integer(50)); 刪除期間失敗的大小(出現2次) (只顯示9個提示中的8個) –
對不起,但這還不夠,您給我們發送來自外部的錯誤消息您要發佈的電子郵件代碼。 Afaik,這個錯誤可能不在你所提供的代碼的這一部分。 – acdcjunior