Description:
Given a root of Binary Search Tree with unique value for each node. Remove the node with given value. If there is no such a node with given value in the binary search tree, do nothing. You should keep the tree still a binary search tree after removal.
Example:
Given binary search tree:
5
/ \
3 6
/ \
2 4
Remove 3, you can either return:
5
/ \
2 6
\
4
or
5 / \ 4 6 / 2
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of the binary search tree. * @param value: Remove the node with given value. * @return: The root of the binary search tree after removal. */ public TreeNode removeNode(TreeNode root, int value) { // write your code here if (root == null) { return null; } if (value < root.val) { root.left = removeNode(root.left, value); } else if (value > root.val) { root.right = removeNode(root.right, value); } else { if (root.right == null) { return root.left; } if (root.left == null) { return root.right; } TreeNode t = root; root = min(t.right); root.right = deleteMin(t.right); root.left = t.left; } return root; } public TreeNode deleteMin(TreeNode x) { if (x.left == null) { return x.right; } x.left = deleteMin(x.left); return x; } public TreeNode min(TreeNode x) { if (x.left == null) { return x; } return min(x.left); } }
Please refer to my post here : http://www.cnblogs.com/dingjunnan/p/5417784.html