Java 不删除布尔删除(对象o)方法中的最后一项
除了最后一项之外,这几乎删除了所有应该删除的内容。 这是我提交时得到的反馈: 输入:[东西,单词,东西,两者,动物园,是] ----------预期大小:0 BST实际节点数:1 删除对象后的树无效 代码如下:Java 不删除布尔删除(对象o)方法中的最后一项,java,computer-science,Java,Computer Science,除了最后一项之外,这几乎删除了所有应该删除的内容。 这是我提交时得到的反馈: 输入:[东西,单词,东西,两者,动物园,是] ----------预期大小:0 BST实际节点数:1 删除对象后的树无效 代码如下: @SuppressWarnings("unchecked") public boolean remove(Object o) { Node n = root; while (n != null) { int comp = n.val
@SuppressWarnings("unchecked")
public boolean remove(Object o) {
Node n = root;
while (n != null) {
int comp = n.value.compareTo(o);
if (comp == 0) {
size--;
remove(n);
return true;
} else if (comp > 0) {
n = n.left;
} else {
n = n.right;
}
}
return false;
}
private void remove(Node root) {
if (root.left == null && root.right == null) {
if (root.parent == null) {
root = null;
} else {
if (root.parent.left == root) {
root.parent.left = null;
} else {
root.parent.right = null;
}
}
} else if (root.left == null || root.right == null) {
Node child = root.left;
if (root.left == null) {
child = root.right;
}
if (root.parent == null) {
root = child;
} else if (root.parent.left == root) {
root.parent.left = child;
} else {
root.parent.right = child;
}
child.parent = root.parent;
} else {
Node successor = root.right;
if (successor.left == null) {
root.value = successor.value;
root.right = successor.right;
if (successor.right != null) {
successor.right.parent = root;
}
} else {
while (successor.left != null) {
successor = successor.left;
}
root.value = successor.value;
successor.parent.left = successor.right;
if (successor.right != null) {
successor.right.parent = successor.parent;
}
}
}
}
删除二进制搜索树中的节点包括以下步骤:
你现在的代码太复杂了。我会用原子方法重写它。你的问题需要一个更好的标题,需要对你试图解决的问题进行更多的解释