从二叉搜索树错误中删除节点?

时间:2018-12-22 22:25:24

标签: c binary-tree binary-search-tree

我正在尝试删除BST中的节点的leetcode挑战。我的删除了它,但是返回了一个乱七八糟的树,不知道为什么。

$this->session->sess_destroy();

1 个答案:

答案 0 :(得分:1)

您需要修复一些问题,并解决您要删除的节点是根节点的情况。

此外,您需要修复删除节点后更新树的方式。您可能需要考虑一个返回右子树中最小值节点的函数。原型可能看起来像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;
}