Function removeFromSubtree(node, key): If node is null: ERROR If key < node.key: node.left = removeFromSubtree(node.left, key) return node If key > node.key: node.right = removeFromSubtree(node.right, key) return node // key == node.key // easy case: leaf node If node.left is null and node.right is null: delete node return null // medium cases: node has one child If node.left is null: new_subtree_root = node.right delete node return new_subtree_root If node.right is null: new_subtree_root = node.left delete node return new_subtree_root // hard case: node has two children min_key, min_val = findMinInSubtree(node.right) new_subtree_root = new BST_Node(min_key, min_val) new_subtree_root.left = node.left new_subtree_root.right = node.right delete node new_subtree_root.right = removeFromSubtree(new_subtree_root.right, min_key) return new_subtree_root end Function