我的合作伙伴和我正在爲數據結構實現二叉搜索樹&算法課程。我們遇到的問題與我們的添加方法。此代碼如下所示:爲二叉搜索樹實現添加方法
public class BinarySearchTree<Type extends Comparable<? super Type>> implements SortedSet<Type>
{
BinaryNode<Type> thisRoot;
/**
* Constructor for this BinarySearchTree
*/
public BinarySearchTree()
{
thisRoot = null;
}
/**
* Adds the specified item to this BinarySearchTree, if it is
* not already contained in this BinarySearchTree.
*
* @param Type item
*
* @return boolean
*/
public boolean add(Type item) {
// If the specified item is null, throw an exception.
if(item == null)
throw new NullPointerException();
// Otherwise, add the item.
return addItem(item, thisRoot);
}
private boolean addItem(Type item, BinaryNode<Type> thisRoot)
{
// Base case - check if thisRoot is null. If it is null,
// we have reached the base case where the item is not contained
// in this BinarySearchTree. Insert the item.
if(thisRoot == null)
{
thisRoot = new BinaryNode<Type>(item);
return true;
}
// Reduction step - recursively call the helper method until the
// specified item is found or added.
// If the item is less than the data in thisNode, then go to
// the left in this BinarySearchTree.
if(item.compareTo(thisRoot.getData()) < 0)
return addItem(item, thisRoot.getLeft());
// If the item is greater than the data in thisNode, then go
// to the right in this BinarySearchTree.
else if (item.compareTo(thisRoot.getData()) > 0)
return addItem(item, thisRoot.getRight());
else
// Item is already contained in this BinarySearchTree.
return false;
}
在我們的測試案例中,我們沒有得到我們預期的結果。我們最初創建了一個空的BinarySearchTree,並調用添加方法。從這裏我們將一個Integer對象(10)傳遞給該方法。這樣做後,遞歸的addItem方法應該已被調用。 thisRoot當前應該引用null(因爲我們創建了一個空的BinarySearchTree),因此thisRoot現在應該引用新的BinaryNode對象。但是,方法調用後,BST中不包含10。 thisRoot仍然指向null。如果任何人有任何建議或見解,爲什麼這可能是,我們將不勝感激。
如果你傳遞一個參考變量作爲一個參數,你在它傳遞的方法中改變了那個引用,那麼你「正在」改變引用變量的引用。 我必須誤解我的基本編程類的簡單概念。 – Jonathan
@JonathanWhitaker:你正在重新分配引用來指向另一個新構造的對象。你不會改變它最初引用的對象(顯然,因爲試圖這樣做會導致空指針異常)。 –
我忘記了沒有什麼被返回,因此參考沒有改變。謝謝你的幫助,我們非常感謝。 – Jonathan