import java.util.*;
import java.lang.*;
import java.io.*;
class BST
{
class node
{
int data;
node left;
node right;
public node(int c)
{
data=c;
left=null;
right=null;
}
}
public BST()
{
root=null;
}
node root;
void insert1(int d)
{
if (root==null) {root=new node(d);return;}
node curr=root,parent=root;
while(curr!=null)
{
parent=curr;
if (d>curr.data) curr=curr.right;
else curr=curr.left;
}
if(d>parent.data) parent.right=new node(d);
else parent.left=new node(d);
}
void insert2(int d)
{
root=insertR(root,d);
}
node insertR(node r,int d)
{
if (r==null){r=new node(d);return r;}
else if(d>r.data) r.right=insertR(r.right,d);
else r.left=insertR(r.left,d);
return r;
}
boolean search(int d)
{
node curr=root;
while(curr!=null)
{
if(d==curr.data) return true;
else if(d>curr.data) curr=curr.right;
else curr=curr.left;
}
return false;
}
void print()
{
inorder(root);
preorder(root);
postorder(root);
DFS();
BFS();
}
void inorder(node r)
{
if (r!=null)
{
inorder(r.left);
inorder(r.right);
}
}
void preorder(node r)
{
if (r!=null)
{
preorder(r.left);
preorder(r.right);
}
}
void postorder(node r)
{
if (r!=null)
{
postorder(r.left);
postorder(r.right);
}
}
void DFS()
{
Stack<node> S=new Stack<node>();
if(root==null) return;
S.push(root);
while(S.size()!=0)
{
node n=S.pop();
if(n.right!=null) S.push(n.right);
if(n.left!=null) S.push(n.left);
}
}
void BFS()
{
Queue<node> Q=new LinkedList<node>();
if(root==null) return;
Q.add(root);
while(Q.size()!=0)
{
node n=Q.remove();
if(n.left!=null) Q.add(n.left);
if(n.right!=null) Q.add(n.right);
}
}
void delete(int d)
{
root = deleteR(root, d);
}
node deleteR(node r, int d)
{
if (r == null) return null;
if (d < r.data)
r.left = deleteR(r.left, d);
else if (d > r.data)
r.right = deleteR(r.right, d);
else {
if (r.left == null)
return r.right;
else if (r.right == null)
return r.left;
r.data = min(r.right);
r.right = deleteR(r.right, r.data);
}
return r;
}
int min(node r)
{
int m = r.data;
while (r.left != null)
{
m = r.left.data;
r = r.left;
}
return m;
}
}
class Ideone
{
{
BST b=new BST();
b.insert1(4);
b.insert1(5);
b.insert2(3);
b.insert2(1);
b.insert2(2);
b.insert1(7);
b.insert1(6);
b.print();
b.delete(4);
b.print();
System.
out.
println(b.
search(3)); }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBCU1QKewoJY2xhc3Mgbm9kZQoJewoJCWludCBkYXRhOwoJCW5vZGUgbGVmdDsKCQlub2RlIHJpZ2h0OwoJcHVibGljIG5vZGUoaW50IGMpCgl7CgkJZGF0YT1jOwoJCWxlZnQ9bnVsbDsKCQlyaWdodD1udWxsOwoJfQoJfQpwdWJsaWMgQlNUKCkKewoJcm9vdD1udWxsOwp9Cm5vZGUgcm9vdDsKdm9pZCBpbnNlcnQxKGludCBkKQp7CglpZiAocm9vdD09bnVsbCkge3Jvb3Q9bmV3IG5vZGUoZCk7cmV0dXJuO30KCW5vZGUgY3Vycj1yb290LHBhcmVudD1yb290OwoJd2hpbGUoY3VyciE9bnVsbCkKCXsKCQlwYXJlbnQ9Y3VycjsKCQlpZiAoZD5jdXJyLmRhdGEpIGN1cnI9Y3Vyci5yaWdodDsKCQllbHNlIGN1cnI9Y3Vyci5sZWZ0OwoJfQoJaWYoZD5wYXJlbnQuZGF0YSkgcGFyZW50LnJpZ2h0PW5ldyBub2RlKGQpOwoJZWxzZSBwYXJlbnQubGVmdD1uZXcgbm9kZShkKTsKfQp2b2lkIGluc2VydDIoaW50IGQpCnsKCXJvb3Q9aW5zZXJ0Uihyb290LGQpOwp9Cm5vZGUgaW5zZXJ0Uihub2RlIHIsaW50IGQpCnsKCWlmIChyPT1udWxsKXtyPW5ldyBub2RlKGQpO3JldHVybiByO30KCWVsc2UgaWYoZD5yLmRhdGEpIHIucmlnaHQ9aW5zZXJ0UihyLnJpZ2h0LGQpOwoJZWxzZSByLmxlZnQ9aW5zZXJ0UihyLmxlZnQsZCk7CglyZXR1cm4gcjsKfQpib29sZWFuIHNlYXJjaChpbnQgZCkKewoJbm9kZSBjdXJyPXJvb3Q7Cgl3aGlsZShjdXJyIT1udWxsKQoJewoJCWlmKGQ9PWN1cnIuZGF0YSkgcmV0dXJuIHRydWU7CgkJZWxzZSBpZihkPmN1cnIuZGF0YSkgY3Vycj1jdXJyLnJpZ2h0OwoJCWVsc2UgY3Vycj1jdXJyLmxlZnQ7Cgl9CglyZXR1cm4gZmFsc2U7Cn0KCnZvaWQgcHJpbnQoKQp7Cglpbm9yZGVyKHJvb3QpOwoJU3lzdGVtLm91dC5wcmludGxuKCk7CglwcmVvcmRlcihyb290KTsKCVN5c3RlbS5vdXQucHJpbnRsbigpOwoJcG9zdG9yZGVyKHJvb3QpOwoJU3lzdGVtLm91dC5wcmludGxuKCk7CglERlMoKTsKCVN5c3RlbS5vdXQucHJpbnRsbigpOwoJQkZTKCk7CglTeXN0ZW0ub3V0LnByaW50bG4oKTsKCQp9CnZvaWQgaW5vcmRlcihub2RlIHIpCnsKCWlmIChyIT1udWxsKQoJewoJCWlub3JkZXIoci5sZWZ0KTsKCQlTeXN0ZW0ub3V0LnByaW50KHIuZGF0YSsiICIpOwoJCWlub3JkZXIoci5yaWdodCk7Cgl9Cn0Kdm9pZCBwcmVvcmRlcihub2RlIHIpCnsKCWlmIChyIT1udWxsKQoJewoJCVN5c3RlbS5vdXQucHJpbnQoci5kYXRhKyIgIik7CgkJcHJlb3JkZXIoci5sZWZ0KTsKCQlwcmVvcmRlcihyLnJpZ2h0KTsKCX0KfQp2b2lkIHBvc3RvcmRlcihub2RlIHIpCnsKCWlmIChyIT1udWxsKQoJewoJCXBvc3RvcmRlcihyLmxlZnQpOwoJCXBvc3RvcmRlcihyLnJpZ2h0KTsKCQlTeXN0ZW0ub3V0LnByaW50KHIuZGF0YSsiICIpOwoJfQp9CnZvaWQgREZTKCkKewoJU3RhY2s8bm9kZT4gUz1uZXcgU3RhY2s8bm9kZT4oKTsKCWlmKHJvb3Q9PW51bGwpIHJldHVybjsKCVMucHVzaChyb290KTsKCXdoaWxlKFMuc2l6ZSgpIT0wKQoJewoJCW5vZGUgbj1TLnBvcCgpOwoJCVN5c3RlbS5vdXQucHJpbnQobi5kYXRhKyIgIik7CgkJaWYobi5yaWdodCE9bnVsbCkgUy5wdXNoKG4ucmlnaHQpOwoJCWlmKG4ubGVmdCE9bnVsbCkgUy5wdXNoKG4ubGVmdCk7Cgl9IAp9CnZvaWQgQkZTKCkKewoJUXVldWU8bm9kZT4gUT1uZXcgTGlua2VkTGlzdDxub2RlPigpOwoJaWYocm9vdD09bnVsbCkgcmV0dXJuOwoJUS5hZGQocm9vdCk7Cgl3aGlsZShRLnNpemUoKSE9MCkKCXsKCQlub2RlIG49US5yZW1vdmUoKTsKCQlTeXN0ZW0ub3V0LnByaW50KG4uZGF0YSsiICIpOwoJCWlmKG4ubGVmdCE9bnVsbCkgUS5hZGQobi5sZWZ0KTsKCQlpZihuLnJpZ2h0IT1udWxsKSBRLmFkZChuLnJpZ2h0KTsKCX0gCn0KCnZvaWQgZGVsZXRlKGludCBkKSAKeyAKCXJvb3QgPSBkZWxldGVSKHJvb3QsIGQpOyAKfQoKbm9kZSBkZWxldGVSKG5vZGUgciwgaW50IGQpCiAgICB7CiAgICAgICAgaWYgKHIgPT0gbnVsbCkgcmV0dXJuIG51bGw7CgkJaWYgKGQgPCByLmRhdGEpCiAgICAgICAgICAgIHIubGVmdCA9IGRlbGV0ZVIoci5sZWZ0LCBkKTsKICAgICAgICBlbHNlIGlmIChkID4gci5kYXRhKQogICAgICAgICAgICByLnJpZ2h0ID0gZGVsZXRlUihyLnJpZ2h0LCBkKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKHIubGVmdCA9PSBudWxsKQogICAgICAgICAgICAgICAgcmV0dXJuIHIucmlnaHQ7CiAgICAgICAgICAgIGVsc2UgaWYgKHIucmlnaHQgPT0gbnVsbCkKICAgICAgICAgICAgICAgIHJldHVybiByLmxlZnQ7CiAKICAgICAgICAgICAgci5kYXRhID0gbWluKHIucmlnaHQpOwogICAgICAgICAgICByLnJpZ2h0ID0gZGVsZXRlUihyLnJpZ2h0LCByLmRhdGEpOwogICAgCQkgfQogCiAgICAgICAgcmV0dXJuIHI7CiAgICB9CiAKICAgIGludCBtaW4obm9kZSByKQogICAgewogICAgICAgIGludCBtID0gci5kYXRhOwogICAgICAgIHdoaWxlIChyLmxlZnQgIT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIG0gPSByLmxlZnQuZGF0YTsKICAgICAgICAgICAgciA9IHIubGVmdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG07CiAgICB9Cn0KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJQlNUIGI9bmV3IEJTVCgpOwoJYi5pbnNlcnQxKDQpOwoJYi5pbnNlcnQxKDUpOwoJYi5pbnNlcnQyKDMpOwoJYi5pbnNlcnQyKDEpOwoJYi5pbnNlcnQyKDIpOwoJYi5pbnNlcnQxKDcpOwoJYi5pbnNlcnQxKDYpOwoJYi5wcmludCgpOwoJYi5kZWxldGUoNCk7CgliLnByaW50KCk7CglTeXN0ZW0ub3V0LnByaW50bG4oYi5zZWFyY2goMykpOwoJfQp9