【发布时间】:2015-04-04 22:27:32
【问题描述】:
我从头开始编写 BinaryTree 结构,其中包括一个 remove(Object obj) 方法,用于从所述树中删除元素。它似乎对除整数以外的所有类型都正常工作,我不知道为什么。
public BinaryTree<E> remove(Object obj) {
try{
E value = (E)obj;
int cmp = value.compareTo(this.value);
if(cmp == 0) {
List<BinaryTree<E>> kids = children();
if(kids.size() == 0) {
return new EmptyBinarySearchTree<E>();
}
if(kids.size() == 1) {
return kids.get(0);
}
//2 children
BinaryTree<E> successor = ((BinarySearchTree)right).smallest();
BinaryTree<E> result = remove(successor.getValue());
result.setValue(successor.getValue());
return result;
}
if(cmp < 0) {
left = left.remove(value);
}
if(cmp > 0) {
right = right.remove(value);
}
}
catch(ClassCastException cce) {
}
return this;
}
我正在使用以下驱动 BinaryTree,它还实现了我构建的 Set:
package setDriver;
import set.*;
import list.*;
public class HwTreeSetDriver
{
public static void main()
{
Set <Integer> values;
values = new TreeSet <Integer> ();
values.add (3);
values.add (5);
values.add (3);
for (int j=0; j<5; j++)
values.add (j * 10);
Iterator<Integer> itty = values.iterator();
while (itty.hasNext())
if (itty.next() % 2 == 1)
itty.remove(); // remove odd numbers
}
}
运行驱动后,大小还是6,集合包含3、5、10、20、30、40。
下面是TreeSet中的remove(Object obj)方法,它又调用了我最初贴的remove方法:
public boolean remove(Object obj){
if(!contains(obj)) return false;
tree = tree.remove(obj);
size--;
return true;
}
【问题讨论】:
-
嗯,它有什么作用?没有工作代码或错误消息/堆栈跟踪,就没有什么可做的了。
-
remove是否过载?有remove(int)版本吗? -
在测试时向我们展示您用来驱动它的代码。
-
我没有看到两段代码之间的联系。
-
这类问题应该通过调试更深入地阐明。你能确定“所有其他对象”和整数在执行中的不同之处吗?
标签: java binary-tree binary-search-tree