11.Delete Node in a BST

2017-01-02  本文已影响0人  Anaven

https://leetcode.com/problems/delete-node-in-a-bst/

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* deleteNode(TreeNode* root, int key) {
        if (!root) {
            return root;
        }
        
        if (key < root->val) {
            root->left = deleteNode(root->left, key);
        } else if (key > root->val) {
            root->right = deleteNode(root->right, key);
        } else {
            if (root->left && root->right) {
                TreeNode* node = findMin(root->right);
                root->val = node->val;
                root->right = deleteNode(root->right, node->val);
            } else {
                root = root->left ? root->left : root->right;
            }
        }
    
        return root;
    }
    
    TreeNode* findMin(TreeNode* root) {
        if (!root) {
            return root;
        }
        
        while(root->left) {
            root = root->left;    
        }
        
        return root;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读