“封顶”二进制搜索树(删除所有元素>上限)

时间:2017-02-05 21:19:36

标签: java algorithm binary-tree binary-search-tree graph-theory

我无法想到这样做的递归算法。我的尝试是:

void capValue(Node node) {

    if (node == null)
        return

    if (node.element > cap)
        capValue(node.left)
        node = null;
    else // node.element < cap
        capValue(node.right)
}

然而,你不能只是将节点归零(至少在java中,我想编写它),因为它只是将当前指针移动到地址0,而我们想要摆脱的对象

,它仍然通过树的根有一个“指针路径”

2 个答案:

答案 0 :(得分:0)

您可以从该功能返回节点。它可以是这样的:

Node cap(Node node, int val)
    // There's no node. There's nothing to cap.
    if (node == null)
        return null;
    // The node and it's left subtree should stay
    if node.key <= val {
        node.right = cap(node.right, val);
        return node;
    }
    // The node and it's right subtree must be deleted,
    // so we can go to the left subtree
    return cap(node.left, val);

它应该在代码中稍后调用root = cap(root, val)

答案 1 :(得分:0)

这应该有效。我们将首先找到更大的节点,然后将父链接更新为null。 如果根节点本身大于上限,则将其置零。

UIFont?