思路还是很清晰的,这题我觉得很有趣啊。
class Solution {
public:
TreeNode* deleteNode(TreeNode* root, int key) {
if (!root) return root;
if (root->val < key) {
root->right = deleteNode(root->right, key); // 如果key大于root->val, 递归到右子树删除
return root;
}
if (root->val > key) {
root->left = deleteNode(root->left, key); // 如果key小于root->val, 递归到左子树删除
return root;
}
if (!root->left) {
TreeNode* temp = root->right; // 如果key = root->val,且左子为NULL,右子树的根成为新的根
delete root;
return temp;
}
if (!root->right) {
TreeNode* temp = root->left; // 如果key = root->val, 且右子为NULL,左子树的根成为新的根
delete root;
return temp;
}
TreeNode* temp = root->right;
while (temp->left) temp = temp->left; // 找到root右子树中最小值结点(即root右子树中的最左结点)
//接下来把root的左子树全部移到该最左结点的左子树
temp->left=root->left;
temp=root->right;//新的根
delete root;
return temp;
}
};