如何删除二进制搜索树

时间:2016-04-21 21:19:01

标签: binary-search-tree

我试图删除二进制搜索树中的最大节点,我认为下面这些代码应该可以做到,但由于某种原因它不是。有人可以帮忙吗!

public void remove() {
            Node current = root;

            while(true){
                Node parent = current;
                current = current.getRighChild();

                if (current == null){
                    parent.setRighChild(null);
                    return;
                }
            }
        }       

2 个答案:

答案 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()
        }