Example 1:

Input: root = [5,3,6,2,4,null,7], key = 3 Output: [5,4,6,2,null,null,7] Explanation: Given key to delete is 3. So we find the node with value 3 and delete it. One valid answer is [5,4,6,2,null,null,7], shown in the above BST.
package pep.Day70;
public class LeetCode_450_Delete_Node_in_BST {
static class TreeNode {
int val;
TreeNode left, right;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public static TreeNode deleteNode(TreeNode root, int key) {
if (root == null)
return null;
if (root.val < key) {
// right me jaenge hum
root.right = deleteNode(root.right, key);
} else if (root.val > key) {
// left me jaenge hum
root.left = deleteNode(root.left, key);
} else {
// agr leaf node ko delete krna hoga
// jab root.left ne null return kiya to jha se yeh
// call hua hoga ie. iska parent me null add ho jaega aur
// yeh key wala node delete ho jaega
if (root.left == null && root.right == null)
return null;
// agr woh node delete krni hai jiska sirf ek child hai
else if (root.left == null || root.right == null)
return root.left == null ? root.right : root.left;
else {
// right wala element uthaya
TreeNode temp = root.right;
// right wala element ke left most child pr jaenge
while (temp.left != null)
temp = temp.left;
// jis root node ko delete krna hai usme leftmost wale ki value daal de
root.val = temp.val;
// aab leftmost wale ko delete krne ke lea
// root node ki right side pr deleteNode call kr denge
root.right = deleteNode(root.right, root.val);
}
}
return root;
}
}






















