struct TreeNode* find_max(struct TreeNode* root)
{
if (root == NULL)
{
return NULL;
}
if (root->right != NULL)
{
return find_max(root->right);
}
else
{
return root;
}
}
struct TreeNode* deleteNode(struct TreeNode* root, int key)
{
if (root==NULL)
{
return NULL;
}
if (key<root->val)
{
root->left=deleteNode(root->left, key);
}
else if (key>root->val)
{
root->right=deleteNode(root->right, key);
}
else
{
struct TreeNode* temp = malloc(sizeof(struct TreeNode));
if (root->left!=NULL&&root->right!=NULL)
{
temp = find_max(root->left);
root->val = temp->val;
root->left=deleteNode(root->left, root->val);
}
else
{
temp = root;
if (root->left!=NULL)
{
root = root->left;
}
else if (root->right!=NULL)
{
root = root->right;
}
else
{
root = NULL;
}
free(temp);
}
}
return root;
}
450. 删除二叉搜索树中的节点
最新推荐文章于 2024-08-03 20:10:04 发布