Leetcode701. 二叉搜索树中的插入操作||450. 删除二叉搜索树中的节点

二叉搜索树中的插入操作

迭代版:

TreeNode* insertIntoBST(TreeNode* root, int val) 
    {
        if(root == nullptr)
            return new TreeNode(val);
        TreeNode* ptr = root;
        while(true)
        {
            if(val < ptr->val)
            {
                if(ptr->left == nullptr)
                {
                    ptr->left = new TreeNode(val);
                    break;
                }
                else
                    ptr = ptr->left;
            }
            else
            {
                if(ptr->right == nullptr)
                {
                    ptr->right = new TreeNode(val);
                    break;
                }
                else
                    ptr = ptr->right;
            }
        }
        return root;
    }

删除二叉搜索树中的节点

    TreeNode* deleteNode(TreeNode* root, int value) {
        if (root == nullptr) {
            return nullptr;
        }
        if (value < root->val) {
            root->left = deleteNode(root->left, value);
        } else if (value > root->val) {
            root->right = deleteNode(root->right, value);
        } else {
            if (root->left == nullptr || root->right == nullptr) {
                root = root->left? root->left: root->right;
            } else {
                TreeNode* cur = root->right;
                while (cur->left) {
                    cur = cur->left;
                }
                root->val = cur->val;
                root->right = deleteNode(root->right, cur->val);
            }
        }
        return root;
    }

猜你喜欢

转载自blog.csdn.net/hlk09/article/details/81257676