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 };