gpt4 book ai didi

java - 删除 BST 中的节点(2)

转载 作者:行者123 更新时间:2023-12-01 10:03:21 25 4
gpt4 key购买 nike

我有 BST,当我想从 BST 中删除节点时,什么也没发生。有人能解释一下为什么吗?

这是我的代码:

private void delete(int value, Node node) {
if (value<node.value) delete(value, node.left);
else if (value> node.value)
delete(value, node.right);
else {
if (node.left != null && node.right != null) {
int maxFromLeft = findMax(node.left);
node.value = maxFromLeft;
delete(maxFromLeft, node.left);
} else if (node.left != null) {
Node trash = node;
node = node.left;
trash = null;
} else if (node.right != null) {
Node trash = node;
node = node.right;
trash = null;
} else {
node = null;
}
}
}

最佳答案

考虑这部分

if (node.left != null) {
Node trash = node;
node = node.left;
trash = null;
}

您需要删除节点。这不会执行任何操作node = node.left。它只是将一个引用分配给另一个引用。这不需要太trash = null

要删除节点,您需要首先将其与父节点断开连接,然后将已删除节点的一​​个子节点连接到父节点,然后将其他子节点插入到应有的位置!

关于java - 删除 BST 中的节点(2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36639919/

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