450. 删除二叉搜索树中的节点

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution 
11 {
12 public:
13     TreeNode* deleteNode(TreeNode* root, int key) 
14     {
15         if (!root) return NULL;
16         if (root->val == key) 
17         {
18             // 这两个 if 把情况 1 和 2 都正确处理了
19             if (root->left == NULL) return root->right;
20             if (root->right == NULL) return root->left;
21             // 处理情况 3
22             TreeNode* minNode = getMin(root->right);
23             root->val = minNode->val;
24             root->right = deleteNode(root->right, minNode->val);
25         } 
26         else if (root->val > key) root->left = deleteNode(root->left, key);
27         else if (root->val < key) root->right = deleteNode(root->right, key);
28         return root;
29     }
30 
31     TreeNode* getMin(TreeNode* node) 
32     {
33         // BST 最左边的就是最小的
34         while (node->left != NULL) node = node->left;
35         return node;
36     }
37 };

 

posted @ 2020-04-02 10:13  Jinxiaobo0509  阅读(125)  评论(0)    收藏  举报