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 };
Mamba never out

浙公网安备 33010602011771号