二叉搜索树包含方法Java参数

时间:2015-11-07 19:22:49

标签: java

我对二进制搜索树类的contains方法感到困惑。

public boolean contains(Object o) {

    if (o == null)
    {
        throw new NullPointerException("Null Items are not allowed in the tree");
    }


    if (root.item.equals(o))
    {
    return true;
    }
    return false;


}

这是我的标题:

public class BSTreeSet<E extends Comparable<E>> implements Set<E>, CompareCount {


private Node root =null;
private int size;
private int compareCount;

我在JUnit测试中收到的错误:

public void testContains() {
    BSTreeSet<Integer> testSet = new BSTreeSet<Integer>( ); 
    testSet.clear( );
    testSet.add( 10);
    testSet.add( 20);
    testSet.add( 30);
    testSet.add( 40);
    testSet.add( 15);
    testSet.add( 25);
    testSet.add( 5);
    testSet.add( 1);

    assertTrue("contains must return true for the element 10", testSet.contains(10));

我很困惑如何使用适当的变量向下搜索右侧和左侧...我知道这几乎和以前一样,但我被卡住了!

1 个答案:

答案 0 :(得分:0)

java.util中的抽象类AbstractCollection<E>或接口Collection<E>定义

public boolean contains(Object o)

这是有道理的,考虑到使用泛型类型E是一个不必要的约束。 (实现可能希望允许完全不同的类型。)

使用Node root作为附加参数很可能不是通过某个接口的类规范所要求的。树的根节点是Tree类的属性,它的实现 - 无论它确实是树的节点还是别的 - 应该保持隐藏状态。通常,您将在树树中包含Object obj的测试调用为

if( tree.contains( obj ) ){ ... }

最后,你的建议是不正确的:如果你要找的东西不等于根节点(或其他一些节点)你将不得不调查左边或右边的子树