美文网首页
LC450 Delete Node in a BST

LC450 Delete Node in a BST

作者: Rookie118 | 来源:发表于2020-09-01 09:02 被阅读0次

本题链接:Delete Node in a BST

本题标签:Tree

本题难度:\color{Orange}{Medium}

英文题目 中文题目

方案1:

class Solution {
private:
    TreeNode* doDelete(TreeNode* node)
    {
        if(node == NULL)
            return node;
        else if(node->left == NULL)
        {
            TreeNode* temp = node->right;
            delete node;
            node = NULL;
            return temp;
        }
        else if(node->right == NULL)
        {
            TreeNode* temp = node->left;
            delete node;
            node = NULL;
            return temp;
        }
        
        TreeNode* next = node->right;
        TreeNode* pre = NULL;
        while(next->left != NULL)
        {
            pre = next;
            next = next->left;
        }
        
        next->left = node->left;
        if(node->right != next)
        {
            pre->left = next->right;
            next->right = node->right;
        }
        return next;
    }
    
public:
    TreeNode* deleteNode(TreeNode* root, int key) {
        if(root == NULL)
            return NULL;
        
        TreeNode* cur = root;
        TreeNode* pre = NULL;
        while(cur != NULL && cur->val != key)
        {
            pre = cur;
            if(cur->val < key)
                cur = cur->right;
            else
                cur = cur->left;
        }
        
        if(pre == NULL)
            return doDelete(cur);
        if(pre->left == cur)
            pre->left = doDelete(cur);
        else
            pre->right = doDelete(cur);
            
        return root;
    }
};

时间复杂度:O ( NlogN )

空间复杂度:O ( N )


相关文章

网友评论

      本文标题:LC450 Delete Node in a BST

      本文链接:https://www.haomeiwen.com/subject/iimmsktx.html