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