gpt4 book ai didi

java - BST(二叉搜索树)的removeAll方法

转载 作者:行者123 更新时间:2023-12-02 01:46:29 25 4
gpt4 key购买 nike

我下面有这段代码,我正在尝试为二叉搜索树创建一个removeAll方法。我认为即使没有所有外部代码和上下文,下面的代码也很可能是可读的,但如果不是,我很乐意提供更多信息。但是,这段代码根本不起作用,我无法找出其原因。我只是尝试使用中序遍历来迭代二叉搜索树,计算 targetElement 存在的次数,然后调用删除方法的次数。

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方法只是比较调用者的内存地址和参数,这可能不是您想要的。

compareTo方法Comparable<T>实际上将由 T 实现所以你应该使用它。 compareTo返回 int如果参数为负,则表示调用者小于参数;如果参数为正,则表示调用者大于参数;如果参数为零,则表示调用者等于参数。因此,您应该更改表达式 ((Comparable<T>) comparableElement).equals(iter.next())comparableElement.compareTo(iter.next()) == 0comparableElement的类型转换不是必需的,因为变量已经是 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);
}
}

如果我误解了您的问题,请告诉我。

关于java - BST(二叉搜索树)的removeAll方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53624587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com