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 C后删除(“G”)后失败
呼叫十字路口后尺寸不合格。
根节点离开子节点时无法删除根节点(
当两者都有三个相同的元素
时交叉失败无法删除root,右侧有更多
插入后删除失败(“M”);插入( “G”);除去( “M”);
你使用的是'=='而不是'equals'吗?插入后删除失败(new Integer(50)); insert(new Integer(75)); remove(new Integer(50));
删除期间失败的大小(2次出现)
(显示9个提示中只有8个)
答案 0 :(得分:0)
您确定要拥有以下
f(!contains(element))
{
return false;
}
考虑你要删除的元素存在于树中的情况,这意味着你正在进行额外的计算。
Here's我很久以前写过的一些代码。警告:它非常长 - 大部分都是多余的。