簡體   English   中英

從二叉搜索樹錯誤中刪除節點?

[英]Deleting a node from binary search tree error?

我正在嘗試刪除BST中的節點的leetcode挑戰。 我的刪除了它,但是返回了一個亂七八糟的樹,不知道為什么。

struct TreeNode* deleteNode(struct TreeNode* root, int key) {

    if (root == NULL){return root;}
    else if(root->val == key){return root;}
    if(key < root->right->val){
        if( key == root->left->val){
            root->left = root->left->left;
        }
        else{
            deleteNode(root->left, key);
        }
    }
    else if( key < root->left->val){
        if ( key == root->right->val){
            root->right = root->right->right;
        }else{
            deleteNode(root->right, key);
        }
    }

    return root;
    }

您需要修復一些問題,並解決您要刪除的節點是根節點的情況。

此外,您需要修復刪除節點后如何更新樹。 您可能需要考慮一個返回右子樹中最小值節點的函數。 原型可能類似於Node *minValueNode(Node *root)

然后,當刪除具有兩個子節點的節點時,將其替換為其右子樹中的最小值節點。

考慮以下處理存儲字符串的節點的實現:

TreeNode *removeWord(TreeNode *tree, char* word){
    if(tree == NULL) return tree;

    if(strcmp(tree->word, word) > 0 ){
        tree->left = removeWord(tree->left, word);
    }
    else if(strcmp(tree->word, word) < 0){
        tree->right = removeWord(tree->right, word);
    }

    else{
        if(tree->left == NULL){
            TreeNode *temp = tree->right;
            free(tree);
            return temp;
        }
        else if(tree->right == NULL){
            TreeNode *temp = tree->left;
            free(tree);
            return temp;
        }

        /* Smallest Node in the right subtree */
        TreeNode *temp = minValueNode(tree->right);

        tree->word = temp->word;
        tree->pos = temp->pos;
        tree->right = removeWord(tree->right, temp->word);
    }
    return tree;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM