【问题标题】:Why is this code for deleting a Node in BST instead of deleting the node making it 0为什么此代码用于在 BST 中删除节点而不是删除节点使其为 0
【发布时间】:2019-11-14 03:59:24
【问题描述】:
void Delete(Node* &root,int data){
    if(root == NULL)
            return;
    if(root -> key > data)
            Delete(root->left,data);
    else if(root -> key < data)
            Delete(root->right,data);
    else{
            // key found ;
            if(root-> left == NULL && root->right ==NULL)
            {
                    delete(root);
                    return;
            }
            else if(root -> left != NULL && root->right == NULL){
                    root -> key = root-> left->key;
                    delete(root -> left);
                    return;
            }
            else if(root -> left == NULL && root->right !=NULL){
                    root->key = root ->right->key;
                    delete(root -> right);
                    return;
            }
            else{
                    Node* temp = root->right;
                    while(temp -> left != NULL)
                            temp = temp -> left;
                    int key = temp -> key;
                    delete(temp);
                    Delete(root,key);
                    root -> key = key;
                    return;
            }
    }

}

如果我尝试删除任何节点说节点值为 50 而不是删除它只是根据我收到的输出将其设为 0。 删除前 50 顺序:-

20 30 40 50 60 70 80 

删除50后 顺序:-

20 30 40 0 60 70 80 

【问题讨论】:

    标签: algorithm tree binary-tree binary-search-tree


    【解决方案1】:

    您必须删除/擦除根的右节点(因为您在右子树中找到最小的),而不是根本身。当要删除的节点同时具有子节点(左和右)时,就会出现问题。更改您的代码如下 -

    Node* temp = root->right;
    while(temp -> left != NULL)
            temp = temp -> left;
    int key = temp -> key;
    delete(temp);
    Delete(root->right,key); // modified this line
    root -> key = key;
    

    其余的一切都很好! : D

    【讨论】:

    • 无差异 相同的新输出:20 30 40 50 60 70 0. 0 移至末尾
    • 另外,我正在删除根的右子树中键=最小值的节点。因此,如果我从 root 或 root 删除 - > 对,它不会有任何影响。我的代码将首先找到密钥,然后删除该特定根目录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多