主要是分三種情況,葉子節點,有左子樹,有右子樹。當時有個bug就是在尋找mode的時候是
root->left = deleteNode(root->left, key); 而不是 deleteNode(root->left, key).
class Solution {
public:
int prenodeSearch(TreeNode* root){
root = root->left;
while(root->right) root = root->right;
return root->val;
}
int postnodeSearch(TreeNode* root){
if(root != NULL){
root = root->right;
while(root->left) root = root->left;
return root->val;
}
return -1;
}
TreeNode* deleteNode(TreeNode* root, int key) {
if(root == NULL) 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 == NULL && root->right == NULL) {
root = NULL;
}
else if(root->right != NULL){
root->val = postnodeSearch(root);
root->right = deleteNode(root->right, root->val);
}
else{
root->val = prenodeSearch(root);
root->left = deleteNode(root->left, root->val);
}
}
return root;
}
};