1 class Solution 2 { 3 public: 4 //if doesn't find,return NULL 5 TreeNode *BinarySearchTreeNodeFindMin(TreeNode *TreeRoot) 6 { 7 if(TreeRoot==NULL) 8 { 9 return NULL; 10 } 11 else if(TreeRoot->left==NULL) 12 { 13 return TreeRoot; 14 } 15 else 16 { 17 return BinarySearchTreeNodeFindMin(TreeRoot->left); 18 } 19 } 20 TreeNode* deleteNode(TreeNode* root, int key) 21 { 22 if(root == NULL) 23 return NULL; 24 25 TreeNode *TmpCell; 26 27 if(key < root -> val) 28 { 29 root -> left = deleteNode(root->left,key); 30 } 31 else if(key > root -> val) 32 { 33 root -> right = deleteNode(root->right,key); 34 } 35 else 36 { 37 if(root->left && root->right) 38 { 39 TmpCell = BinarySearchTreeNodeFindMin(root -> right); 40 root -> val = TmpCell -> val; 41 root -> right = deleteNode(root->right,root->val); 42 } 43 else 44 { 45 TmpCell = root; 46 if(root->left==NULL) 47 { 48 root = root -> right; 49 } 50 else if(root->right==NULL) 51 { 52 root = root -> left; 53 } 54 free(TmpCell); 55 } 56 } 57 return root; 58 } 59 };