[英]Removing a node from a binary search tree in Java?
我已经得到了一个二进制搜索树,作为任务的一部分,我需要在set和node类上都实现remove()
方法。
但是,现在,我的JUnit测试无法正确删除项目。 代码如下:
public boolean remove(E item) {
if (this.contains(item)) {
this.root.remove(item);
this.count--;
return true;
}
return false;
}
public BSTNode<E>remove(E item) {
if (item.equals(this.value)) {
return this.replacementSubtreeFromChildren(this.left, this.right);
}
if (item.compareTo(this.value) < 0) {
this.left = this.left.remove(item);
} else {
this.right = this.right.remove(item);
}
// there was no need to replace the receiver node
return this;
}
其中replacementSubtreeFromChildren
是:
private BSTNode<E> replacementSubtreeFromChildren(BSTNode<E> left, BSTNode<E> right) {
if (left == null && right == null) {
return null;
}
if (left != null && right == null) {
return left;
}
if (right != null && left == null) {
return right;
}
this.getLeftmostNode().value = this.right.getLeftmostNode().value;
this.value = this.getLeftmostNode().value;
return this;
}
如果可能,我希望使用间接答案。 我想尝试自己解决这个问题。 任何人都可以提供一些有关这里出了什么问题的指示吗?
不会说这是一个答案,但我无法对自己的代表发表评论。 发布节点的实现方式将有所帮助。
如果您的树被可视化为数组[10,5,12],使得5是10的左节点,而12是右节点。 如果您调用.remove(10)。 在ReplacementSubtreeFromChildren方法的最后,您将有一棵看起来像这样的树[12,12,12]。 因为您将5设置为12,然后将10设置为(5的值)12。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.