https://leetcode.com/problems/delete-node-in-a-bst/

1. Use recursion:

  1. //36 ms 15.5 MB
  2. /**
  3. * Definition for a binary tree node.
  4. * struct TreeNode {
  5. * int val;
  6. * TreeNode *left;
  7. * TreeNode *right;
  8. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
  9. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  10. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  11. * };
  12. */
  13. class Solution {
  14. public:
  15. TreeNode* deleteNode(TreeNode* root, int key) {
  16. if (!root) return root;
  17. if (key > root->val) {
  18. root->right = deleteNode(root->right, key);
  19. } else if (key < root->val) {
  20. root->left = deleteNode(root->left, key);
  21. } else {
  22. if (root->left && root->right) {
  23. TreeNode* min = root->right;
  24. while (min->left)
  25. min = min->left;
  26. root->val = min->val;
  27. root->right = deleteNode(root->right, min->val);
  28. } else {
  29. TreeNode* new_root;
  30. if(root->left == NULL){
  31. new_root = root->right;
  32. } else {
  33. new_root = root->left;
  34. }
  35. root->left = NULL;
  36. root->right = NULL;
  37. delete root;
  38. return new_root;
  39. }
  40. }
  41. return root;
  42. }
  43. };