基本操作 O(logn)

1. 二分搜索树删除节点:
https://www.runoob.com/data-structures/binary-search-remove.html
方法:移动到要删除的节点,使用右子树最小元素覆盖节点,然后删除右子树最小节点
code
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*///找到key,使用右子树中最小的元素替换key,然后删除右子树中最下的元素class Solution {public:TreeNode* deleteNode(TreeNode* root, int key) {if(root == NULL)return NULL;if(root->val<key){root->right = deleteNode(root->right,key);return root;}if(root->val>key){root->left = deleteNode(root->left,key);return root;}if(!root->left) return root->right;if(!root->right) return root->left;TreeNode* minNode = root->right;while(minNode->left!=NULL){minNode = minNode->left;}root->val = minNode ->val;root->right = deleMin(root->right);return root;}private:TreeNode* deleMin(TreeNode* node){if(!node->left)return node->right;node->left = deleMin(node->left);return node;}};
