2015-11-07 57 views
0

我对我的二进制搜索树类的包含方法感到困惑。二进制搜索树包含方法Java参数

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)); 

我感到困惑如何搜索降权和左侧用适当的变量...我知道这是几乎相同的问题,但我卡住了!

+2

你是什么意思的“当接口创建此方法”? – qqilihq

+0

当我添加未实现的方法,它会创建一个看起来像下面这样的默认方法: 公共布尔包含(对象为arg0){ \t \t \t \t返回FALSE; – EllioLintt

+0

如果你的接口需要一个Object参数,你需要使用它。但请注意,您的问题中的“包含”方法实际上有两个**参数。 – qqilihq

回答

0

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

public boolean contains(Object o) 

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

使用Node root作为附加参数很可能不是您的类的规范通过某个接口指定的内容。树的根节点是Tree类的一个属性及其实现 - 无论它是树的节点还是别的东西 - 都应该保持隐藏。通常你调用一个对象obj的遏制测试在树树

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

最后,你implmentation是不正确的:如果你正在寻找的东西不等于根节点(或一些其他节点),您必须调查左侧或右侧子树。