程式語言 - LeetCode - C - 450. Delete Node in a BST



參考資訊:
https://www.cnblogs.com/grandyang/p/6228252.html

題目:


解答:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
struct TreeNode* deleteNode(struct TreeNode *root, int key)
{
    if (!root) {
        return root;
    }
    
    if (root->val > key) {
        root->left = deleteNode(root->left, key);
    }
    else if (root->val < key) {
        root->right = deleteNode(root->right, key);
    }
    else {
        if (!root->left || !root->right) {
            root = (root->left) ? root->left : root->right;
        }
        else {
            struct TreeNode *cur = root->right;

            while (cur->left) {
                cur = cur->left;
            }

            root->val = cur->val;
            root->right = deleteNode(root->right, cur->val);
        }
    }

    return root;
}