我试图删除二进制搜索树中的最大节点,我认为下面这些代码应该可以做到,但由于某种原因它不是。有人可以帮忙吗!
public void remove() {
Node current = root;
while(true){
Node parent = current;
current = current.getRighChild();
if (current == null){
parent.setRighChild(null);
return;
}
}
}
答案 0 :(得分:0)
public void remove()
{
root = deleteMax(root);
}
private Node deleteMax(Node x ) {
if (x.getRighChild() == null)
{
return x.getLeftChild();
}
x.setRighChild(deleteMax(x.getRighChild()));
return x;
}
答案 1 :(得分:-1)
在您的代码中,如果右侧节点为空,您仍然会将其删除。如果它是最大值,而不是删除当前。尝试这样的事情:
removeLargest() {
current = getRoot();
rightNode == null;
while (root.Right){
current == root.Right
}
if (current.left()){
rotate()
}
current.delete()
}