[英]removeAll method for BST (Binary Search Tree)
我下面有這段代碼,我正在嘗試為二進制搜索樹創建removeAll方法。 我認為即使沒有所有外部代碼和上下文,下面的代碼也很可能可讀,但是如果沒有,我將很樂意提供更多信息。 但是,此代碼根本無法正常工作,我無法找出原因。 我只是嘗試使用有序遍歷遍歷二進制搜索樹,計算targetElement存在的次數,然后將該次數調用remove方法。
public void removeAllOccurrences(T targetElement) throws ElementNotFoundException
{
removeElement(targetElement);
Comparable<T> comparableElement = (Comparable<T>) targetElement;
Iterator<T> iter = iteratorInOrder();
int n = 0;
while(iter.hasNext())
{
if (((Comparable<T>) comparableElement).equals(iter.next()))
{
n++;
}
}
for(int i=0; i<n; i++)
{
removeElement(targetElement);
}
}
該類的名稱是LinkedBinarySearchTree。 我們正在使用BinaryTreeNode。 我們有一個getRootNode()方法。
由於您假設T
實現了Comparable<T>
(通過強制轉換targetElement
),因此應該使用此功能。 在equals
使用的是比較法comparableElement
和iter.next()
是從繼承的, Object
類,可能沒有被覆蓋T
。 equals
方法的默認實現只是將調用者的內存地址與參數進行比較,而這可能不是您想要的。
Comparable<T>
的compareTo
方法實際上將由T
實現,因此您應該改用它。 compareTo
返回一個int
值,如果它為負,則表示調用者小於參數;如果為正,則調用者大於參數;如果為零,則調用者等於參數。 因此,應將表達式((Comparable<T>) comparableElement).equals(iter.next())
更改為((Comparable<T>) comparableElement).equals(iter.next())
comparableElement.compareTo(iter.next()) == 0
。 的鑄造comparableElement
因為變量是已類型是沒有必要的Comparable<T>
這是代碼中更改的外觀。
public void removeAllOccurrences(T targetElement) throws ElementNotFoundException {
removeElement(targetElement);
Comparable<T> comparableElement = (Comparable<T>) targetElement;
Iterator<T> iter = iteratorInOrder();
int n = 0;
while(iter.hasNext()) {
if (comparableElement.compareTo(iter.next()) == 0) {
n++;
}
}
for (int i = 0; i < n; i++) {
removeElement(targetElement);
}
}
讓我知道我是否誤解了您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.