【发布时间】:2019-05-06 13:36:42
【问题描述】:
我在下面有这段代码,我正在尝试为二叉搜索树创建一个 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() 方法。
【问题讨论】:
-
如果有人想知道,removeElement 和 iteratorInOrder() 可以正常工作。
-
我也试过在 if 语句中使用 iter.remove() 然后删除 for 语句。也不会删除所有出现的 targetElement。
-
n是否在增加?if检查相等性的条件对我来说似乎有点不对劲。 -
@TheGamer007 n 如果 if 条件为真,则递增。如果找到匹配项,则增加 n,否则保持 n 不变。我知道它关闭了,但我确实知道它关闭的原因或如何修复它。
标签: java binary-tree binary-search-tree removeall