public
class
GFG {
static
class
TreeNode {
int
data;
TreeNode left;
TreeNode right;
TreeNode(
int
data) {
this
.data = data; }
}
static
void
inorder(TreeNode root)
{
if
(root !=
null
) {
inorder(root.left);
System.out.print(root.data +
" "
);
inorder(root.right);
}
}
static
TreeNode insert(TreeNode root,
int
key)
{
if
(root ==
null
) {
TreeNode temp =
new
TreeNode(key);
return
temp;
}
if
(key < root.data) {
root.left = insert(root.left, key);
}
else
{
root.right = insert(root.right, key);
}
return
root;
}
static
TreeNode deleteIterative(TreeNode root,
int
key)
{
TreeNode curr = root;
TreeNode prev =
null
;
while
(curr !=
null
&& curr.data != key) {
prev = curr;
if
(key < curr.data)
curr = curr.left;
else
curr = curr.right;
}
if
(curr ==
null
) {
System.out.println(
"Key "
+ key
+
" not found in the"
+
" provided BST."
);
return
root;
}
if
(curr.left ==
null
|| curr.right ==
null
) {
TreeNode newCurr;
if
(curr.left ==
null
)
newCurr = curr.right;
else
newCurr = curr.left;
if
(prev ==
null
)
return
newCurr;
if
(curr == prev.left)
prev.left = newCurr;
else
prev.right = newCurr;
}
else
{
TreeNode p =
null
;
TreeNode temp;
temp = curr.right;
while
(temp.left !=
null
) {
p = temp;
temp = temp.left;
}
if
(p !=
null
)
p.left = temp.right;
else
curr.right = temp.right;
curr.data = temp.data;
}
return
root;
}
public
static
void
main(String[] args)
{
TreeNode root =
null
;
root = insert(root,
10
);
root = insert(root,
7
);
root = insert(root,
5
);
root = insert(root,
8
);
root = insert(root,
15
);
root = insert(root,
11
);
root = insert(root,
18
);
System.out.println(
"Inorder traversal of original BST."
);
inorder(root);
System.out.println(
"\n"
);
root = deleteIterative(root,
11
);
System.out.println(
"Deletion of 11"
);
System.out.println(
"Inorder traversal post deletion:"
);
inorder(root);
System.out.println(
"\n"
);
root = deleteIterative(root,
15
);
System.out.println(
"Deletion of 15"
);
System.out.println(
"Inorder traversal post deletion:"
);
inorder(root);
System.out.println(
"\n"
);
root = deleteIterative(root,
10
);
System.out.println(
"Deletion of 10"
);
System.out.println(
"Inorder traversal post deletion:"
);
inorder(root);
System.out.println(
"\n"
);
}
}