当我有两个 child 时,我在删除节点时遇到问题,我不知道该怎么办,因为我已经解决了没有 child 、左 child 和右 child 的问题
struct Node* deleteNode(Node *root, int val)
{
if(root == NULL) return root;
else if(val < root->data)
root->left = deleteNode(root->left,val);
else if(val > root->data)
root->right = deleteNode(root->right, val);
else
{
if(root->left == NULL && root->right == NULL)
{
free(root);
root = NULL;
}
else if(root->left == NULL)
{
Node *temp = root;
root = root->right;
free(temp);
}
else if(root->right == NULL)
{
Node *temp = root;
root = root->left;
free(temp);
}
}
最佳答案
如果我正确理解你的问题,你必须使一个子节点成为另一个子节点的子节点。您必须为添加执行另一个递归函数,以防两个子节点的度数都 < 1
关于c - 删除C BST中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43856859/