簡體   English   中英

BST(二進制搜索樹)的removeAll方法

[英]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使用的是比較法comparableElementiter.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM