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&&root->right) root=root->right;
        return root;
    }
    return NULL;
}

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,temp->val);
        }else{
            temp=root->right;
            free(root);
            return temp;
        }
    }
    return root;
}

结果:

posted on 2024-03-14 19:39  神奇的萝卜丝  阅读(18)  评论(0)    收藏  举报