我有两个孩子时删除节点时遇到问题,我不知道该怎么办,因为我解决了没有孩子,左孩子和右孩子的问题

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/

10-16 11:30