感觉精髓在于这张图
代码自己写的很啰嗦,日后改进。
TreeNode *pre;
TreeNode* deleteNode(TreeNode* root, int key) {
if(root == nullptr)
return root;
if(root->val == key){
if(pre == nullptr){
if(root->right == nullptr){
root = root->left;
}else{
TreeNode *r = root->right;
TreeNode *l = root->left;
// cout << root->left->val << endl;
root = root->right;
while(r->left != nullptr){
r = r->left;
}
r->left = l;
}
}else{
if(pre->val > root->val){
if(root->right == nullptr){
pre->left = root->left;
}else{
TreeNode *node = root->left;
// cout << root->left->val << endl;
pre->left = root->right;
TreeNode *l = root->right;
while(l->left != nullptr){
l = l->left;
}
l->left = node;
}
}else if(pre->val < root->val){
if(root->right == nullptr){
pre->right = root->left;
}else{
TreeNode *node = root->left;
pre->right = root->right;
TreeNode *l = root->right;
while(l->left != nullptr){
l = l->left;
}
l->left = node;
}
}
}
}else{
pre = root;
deleteNode(root->left, key);
pre = root;
deleteNode(root->right, key);
}
return root;