2015-11-07 52 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是不正確的:如果你正在尋找的東西不等於根節點(或一些其他節點),您必須調查左側或右側子樹。