Problem : https://leetcode.com/problems/delete-node-in-a-bst/
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode deleteNode(TreeNode root, int key) {
if (root == null) {
return root;
}
// delete node from left sub-tree
if (root.val > key) {
root.left = deleteNode(root.left, key);
return root;
}
// delete node from right sub-tree
if (root.val < key) {
root.right = deleteNode(root.right, key);
return root;
}
// root.val == key
if (root.left == null) {
return root.right;
}
if (root.right == null) {
return root.left;
}
// use right node as the new root
TreeNode newRoot = root.right;
// Because all nodes in right sub-tree are larger than current root node,
// and left child is less than current root node,
// then the left child must be the smallest value comparing to the right sub-tree.
// Attach current left child to the most left node of the right sub-tree.
TreeNode p = root.right;
while (p.left != null) {
p = p.left;
}
p.left = root.left;
return newRoot;
}
}
No comments:
Post a Comment