使用二叉搜索树时遇到问题删除function

我试图从二叉搜索树中删除给定的值。 如果给定值存在,则函数返回1,如果不存在,则返回0。 我认为我没有正确回报价值观。 似乎删除了正确的值,但是当我不应该删除时,我正在打印删除消息,表示该函数在不应该返回时返回0。 任何人都可以帮我发现我的错误吗? 谢谢。

/*Remove data from BST pointed to by rootRef, changing root if necessary. * For simplicity's sake, always choose node's in-order * successor in the two-child case. * Memory for removed node should be freed. * Return 1 if data was present, 0 if not found. */ int removeBST(struct TreeNode** rootRef, int data) { struct TreeNode* heir; struct TreeNode* prev; if(*rootRef == NULL) { return 0; } if(data data) { removeBST(&(*rootRef)->left, data); } else if(data > (*rootRef)->data) { removeBST(&(*rootRef)->right, data); } else { struct TreeNode* temp; if((*rootRef)->right == NULL) { temp = *rootRef; *rootRef = (*rootRef)->left; free(temp); } else if((*rootRef)->left == NULL) { temp = *rootRef; *rootRef = (*rootRef)->right; free(temp); } else { heir = (*rootRef)->left; prev = *rootRef; while(heir->right != NULL) { prev = heir; heir = heir->right; } (*rootRef)->data = heir->data; if(prev != *rootRef) { prev->right = heir->left; } else { prev->left = heir->left; } free(heir); } return 1; } return 0; }