方案一
这个方案我不放心的原因是,ancestor和parent是new出来的,放在堆里的,所以要释放。因为最后要返回ancestor->right,所以不能释放ancestor。这样应该是不行的。那你除非返回的是ancestor。随后释放的时候还是一个麻烦。返回给root以后
方案二
代码实现
//以非递归的方式删除最大值,返回最大值
int BST_removeMaxNR(BST *bst,lrNode *node) {
if (node->right == NULL) {
int ret = node->e;
lrNode *ancestor = node;
node = node->left;
free(ancestor);
ancestor = NULL;
return ret;
}
else
{
lrNode *parent = node;
while (node->right != NULL)
node = node->right;
while (parent->right != node)
parent = parent->right;
int ret = node->e;
parent->right = node->left;
node->left = NULL;
free(node);
node = NULL;
bst->size--;
return ret;
}
}