删除BST中的最大元素

时间:2017-07-09 18:06:40

标签: binary-search-tree

下面的一些代码似乎太明显了,使用最右边的分支遍历树,因为这是所有最大值的地方。但是,我不明白我在Robert Sedgewick的算法书中看到的关于这个代码的一些事情

     public void deleteMax() {
     if (isEmpty()) throw new NoSuchElementException("");
     root = deleteMax(root);
     assert check();
     }

    private Node deleteMax(Node x) {
    if (x.right == null) return x.left;
    x.right = deleteMax(x.right);
    x.size = size(x.left) + size(x.right) + 1;
    return x;
    }

在私有方法中,如果x的右子元素为空,为什么我们返回左元素?从我的理解中,如果x没有正确的子元素,x将是最大值,并且是我们可以去的最正确的节点。也是我不明白我们什么时候在第二种方法的最后一行返回x。

1 个答案:

答案 0 :(得分:0)

如果x没有合适的孩子,则x是最大节点。我们"删除"返回x.left(新的最大节点)。在我们修改了正确的子树后,我们会返回x