我无法解决这个问题...我可以插入和排序没有问题的项目,我可以删除第一个插入后的节点,但在特殊情况下,我正在尝试删除插入的第一个节点以启动树,它没有做任何事情。
我不明白为什么会出现这个问题,任何有助于弄清逻辑的帮助都会受到赞赏。
淡化我的代码版本会复制问题。 https://pastebin.com/hxcqpG1U
这是我的删除方法:
public void delete(KeyComp key) {
delete(_root, key);
}
private Node delete(Node root, KeyComp key) {
//TO-DO: DELETE AN ITEM IN THE TABLE, GIVEN THE KEY
//empty tree
if (root == null)
return root;
if (key.keyCompareTo(root.data) < 0)
root.left = delete(root.left, key);
else if (key.keyCompareTo(root.data) > 0)
root.right = delete(root.right, key);
else
{
// node with only one child or no child
if (root.left == null)
return root.right;
else if (root.right == null)
return root.left;
// node with two children: Get the inorder successor (smallest
// in the right subtree)
root.data = getMin(root.right).data;
// Delete the inorder successor
root.right = delete(root.right, root.data);
}
return root;
}
答案 0 :(得分:0)
假设您的树没有平衡,插入的第一个节点将是树的根节点。由于您的删除方法通过更新树内引用来操作以指向已删除节点周围的操作,因此除非您还更新指向根节点的指针,否则尝试删除根节点将不会执行任何操作。
很难从你提供的代码中看出来,但似乎你需要这样的东西:
public void delete(KeyComp key) {
_root = delete(_root, key);
}