对于二叉搜索树,当删除节点时,有下面几种情况:
(1)删除节点左右子树为空,直接将该节点删除即可。
(2)删除节点左右子树有一个为空,将另一个子树替代该节点即可。
(3)删除节点左右子树均不为空,则左子树的根节点放在该节点右子树的最左边叶子节点之上。具体代码如下:
TreeNode * deleteOneNode(TreeNode * root,int key)
{
if(root == NULL)
{
return root;
}
if(root->val==key)
{
if(root->left==NULL&&root->right!=NULL)
{
return root->right;
}else if(root->left!=NULL&&root->right==NULL)
{
return root->left;
}else
{
TreeNode * cur = root->right;
while(cur->left!=NULL)
{
cur = cur->left;
}
TreeNode * Node1 = root;
cur->left = root->left;
delete Node1;
return root->right;
}
}
root->left = deleteOneNode(root->left,key);
root->right = deleteOneNode(root->right,key);
return root;
}