BST中删除的节点设置为值0

时间:2014-08-14 22:51:17

标签: c binary-search-tree

我正在尝试编写一个删除BST中节点的函数。虽然删除工作正常,但删除节点后我按顺序遍历,我仍然看到删除的节点值为0.我原本希望看不到节点。

例如,当删除节点18时,16被复制到18,而值为16的节点被删除。

  • 删除前的顺序遍历为[8 10 12 15 16 18 20 25 50]
  • 删除后的顺序遍历为[8 10 12 15 0 16 20 25 50]
  • 我期待[8 10 12 15 16 20 25 50]

以下是代码段:

bool deleteNode(Node *root,int key) {
    if(root) {
        if(key < root->data)
                return deleteNode(root->left,key);
        else if(key > root->data)
                return deleteNode(root->right,key);
        else if(!root->left && !root->right) {
            free(root);
            return true;
        } else if(root->left && !root->right) {
            Node *inorderPre=maxElement(root->left);
            root->data=inorderPre->data;
            return deleteNode(inorderPre,root->data);
        } else {
            Node* inorderSucc=minElement(root->right);
            root->data=inorderSucc->data;
            return deleteNode(inorderSucc,root->data);
        }
    }
    return false;
}

辅助功能:

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

Node* maxElement(Node *root) {
    while(root->right!=NULL) {
        root=root->right;
    }
    return root;
}

0 个答案:

没有答案