删除整数时BinarySearchTree删除方法失灵

时间:2015-04-04 22:27:33

标签: java binary-tree binary-search-tree

我从头开始编写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;
}

1 个答案:

答案 0 :(得分:-1)

Is int an object in Java?

int不被视为对象 这里有关于证明的stackoverflow的问题