我无法想到这样做的递归算法。我的尝试是:
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,而我们想要摆脱的对象
,它仍然通过树的根有一个“指针路径”答案 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?