为什么我在BST中删除节点而不是删除的代码为要删除的节点分配了一个新值(如0或随机值)?

Node* search(Node* &root,int data) {
    if (root == NULL) {
        cout << "key not found\n";
        return NULL;
    }
    if (root -> key == data)
        return root;
    else if(root-> key > data)
        return search(root -> left,data);
    else
        return search(root -> right,data);
}

Node* findMinVal(Node* &root){
    Node* current = root;
    while (current -> left != NULL)
        current = current -> left;
    return current;
}

void deleteNode(Node* &root,int key) {
    if (root == NULL)
        return;
    Node* node = search(root,key);
    if (node -> left == NULL) {
        Node* temp = node;
        node = node -> right;
        free(temp);
    }
    else if (node -> right == NULL) { 
        Node* temp;
        node = node -> left;
        free(temp);
    }
    else {
        Node* temp = findMinVal(node -> right);
        node -> key = temp -> key;
        free(temp);
    }
}

示例树:

对给定树的有序遍历:

20 30 40 50 60 70 80 

输出和命令:

Delete 20
Inorder traversal of the modified tree 
0 30 40 50 60 70 80 
tgy126 回答:为什么我在BST中删除节点而不是删除的代码为要删除的节点分配了一个新值(如0或随机值)?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3158969.html

大家都在问