标签:
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
/** * 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
LintCode : Remove Node in Binary Search Tree
标签:
原文地址:http://www.cnblogs.com/dingjunnan/p/5417898.html