llllmz

导航

450. 删除二叉搜索树中的节点c

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
struct TreeNode* leftleave(struct TreeNode* root){
    if(root->left){
        root=root->left;
        while(root->right) root=root->right;
    }else{
        root=NULL;
    }
    return root;
}

struct TreeNode* deleteNode(struct TreeNode* root, int key){
    if(!root) return NULL;
    if(!root->left && !root->right && root->val==key ) {
        free(root);
        return NULL;
    }
    if(root->val > key){
        root->left=deleteNode(root->left,key);
    }else if(root->val <key){
        root->right=deleteNode(root->right,key);
    }else{
        struct TreeNode* temp=leftleave(root);
        if(temp){
            root->val=temp->val;
            root->left=deleteNode(root->left,root->val);
        }else{
            temp=root->right;
            free(root);
            return deleteNode(temp,key);
        }
    }
    return root;
}

 

posted on 2024-03-21 17:10  神奇的萝卜丝  阅读(1)  评论(0编辑  收藏  举报