删除C BST

时间:2017-05-08 20:36:35

标签: c

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

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 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你必须让一个子节点成为另一个子节点。如果子节点都没有度数&lt;你必须为add添加另一个递归函数。 1