删除二叉搜索树节点的三种情景:
情景1:删除的节点没有子树
如图,删除元素10,我们只需要将它的父节点9的右指针指向NULL,释放元素10的节点;
代码:
if (root->left == NULL && root->right == NULL) //节点没有左节点和右节点
{
free(root); //释放内存
root = NULL;
}
情景2:删除的节点有一个子树(左右皆可)
如图,我们想删除节点10,但是节点10有一个右节点,那么我们可以将节点10的父节点指向节点10的右节点,再释放节点10的内存;
代码:
else if (root->left == NULL) //有右节点
{
struct Node* temp = root;
root = root->right; // 将 root 指针更新为指向当前节点的右子节点
free(temp); //释放
}
else if (root-