import java.util.Scanner ;
class Node
{
Node left;
Node right;
Node( )
{
data = null ;
left = null ;
right = null ;
}
}
class BinaryTree
{
Node head;
Scanner input
= new Scanner
( System .
in ) ; BinaryTree( )
{
head = null ;
}
public void createNode( Node temp,Node newnode)
{
if ( head== null )
{
System .
out .
println ( "No value exist in tree, the value just entered is set to Root" ) ; head = newnode;
return ;
}
if ( temp== null )
temp = head;
System .
out .
println ( "where you want to insert this value, l for left of (" + temp.
data + ") ,r for right of (" + temp.
data + ")" ) ; char inputValue= input.next ( ) .charAt ( 0 ) ;
if ( inputValue== 'l' ) {
if ( temp.left == null )
{
temp.left = newnode;
System .
out .
println ( "value got successfully added to left of (" + temp.
data + ")" ) ; return ;
} else {
System .
out .
println ( "value left to (" + temp.
data + ") is occupied 1by (" + temp.
left .
data + ")" ) ; createNode( temp.left ,newnode) ;
}
}
else if ( inputValue== 'r' )
{
if ( temp.right == null )
{
temp.right = newnode;
System .
out .
println ( "value got successfully added to right of (" + temp.
data + ")" ) ; return ;
} else {
System .
out .
println ( "value right to (" + temp.
data + ") is occupied by (" + temp.
right .
data + ")" ) ; createNode( temp.right ,newnode) ;
}
} else {
System .
out .
println ( "incorrect input plz try again , correctly" ) ; return ;
}
}
public Node generateTree( ) {
int [ ] a = new int [ 10 ] ;
int index = 0 ;
while ( index< a.length ) {
a[ index] = getData( ) ;
index++;
}
if ( a.length == 0 ) {
return null ;
}
Node newnode= new Node( ) ;
/*newnode.left=null;
newnode.right=null;*/
return generateTreeWithArray( newnode,a,0 ) ;
}
public Node generateTreeWithArray( Node head,int [ ] a,int index) {
if ( index >= a.length )
return null ;
System .
out .
println ( "at index " + index
+ " value is " + a
[ index
] ) ; if ( head== null )
head= new Node( ) ;
head.data = a[ index] ;
head.left = generateTreeWithArray( head.left ,a,index* 2 + 1 ) ;
head.right = generateTreeWithArray( head.right ,a,index* 2 + 2 ) ;
return head;
}
{
System .
out .
println ( "Enter the value to insert:" ) ; }
public void print( )
{
inorder( head) ;
}
public void inorder( Node node)
{
if ( node!= null )
{
inorder( node.left ) ;
System .
out .
println ( node.
data ) ; inorder( node.right ) ;
}
else
return ;
}
}
public class BinaryTreeWorker
{
static BinaryTree treeObj = null ;
static Scanner input
= new Scanner
( System .
in ) ; public static void displaymenu( )
{
int choice;
do {
System .
out .
print ( "\n Basic operations on a tree:" ) ; System .
out .
print ( "\n 1. Create tree \n 2. Insert \n 3. Search value \n 4. print list\n 5. generate a tree \n Else. Exit \n Choice:" ) ; choice = input.nextInt ( ) ;
switch ( choice)
{
case 1 :
treeObj = createBTree( ) ;
break ;
case 2 :
Node newnode= new Node( ) ;
newnode.data = getData( ) ;
newnode.left = null ;
newnode.right = null ;
treeObj.createNode ( treeObj.head ,newnode) ;
break ;
case 3 :
//searchnode();
break ;
case 4 :
System .
out .
println ( "inorder traversal of list gives follows" ) ; treeObj.print ( ) ;
break ;
case 5 :
Node tempHead = treeObj.generateTree ( ) ;
System .
out .
println ( "inorder traversal of list with head = (" + tempHead.
data + ")gives follows" ) ; treeObj.inorder ( tempHead) ;
break ;
default :
return ;
}
} while ( true ) ;
}
{
System .
out .
println ( "Enter the value to insert:" ) ; }
public static BinaryTree createBTree( )
{
return new BinaryTree( ) ;
}
public static void main
( String [ ] args
) {
displaymenu( ) ;
}
}
aW1wb3J0IGphdmEudXRpbC5TY2FubmVyOwoKCmNsYXNzIE5vZGUKewogICAgSW50ZWdlciBkYXRhOwogICAgTm9kZSBsZWZ0OwogICAgTm9kZSByaWdodDsKICAgIE5vZGUoKQogICAgewogICAgICAgIGRhdGEgPSBudWxsOwogICAgICAgIGxlZnQgPSBudWxsOwogICAgICAgIHJpZ2h0ID0gbnVsbDsKICAgIH0KfQpjbGFzcyBCaW5hcnlUcmVlCnsKICAgIE5vZGUgaGVhZDsKICAgIFNjYW5uZXIgaW5wdXQgPSBuZXcgU2Nhbm5lcihTeXN0ZW0uaW4pOwogICAgQmluYXJ5VHJlZSgpCiAgICB7CiAgICAgICAgaGVhZCA9IG51bGw7CiAgICB9CgogICAgcHVibGljIHZvaWQgY3JlYXRlTm9kZShOb2RlIHRlbXAsTm9kZSBuZXdub2RlKSAKICAgIHsKCiAgICAgICAgaWYoaGVhZD09bnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gdmFsdWUgZXhpc3QgaW4gdHJlZSwgdGhlIHZhbHVlIGp1c3QgZW50ZXJlZCBpcyBzZXQgdG8gUm9vdCIpOwogICAgICAgICAgICBoZWFkID0gbmV3bm9kZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZih0ZW1wPT1udWxsKQogICAgICAgICAgICB0ZW1wID0gaGVhZDsKCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ3aGVyZSB5b3Ugd2FudCB0byBpbnNlcnQgdGhpcyB2YWx1ZSwgbCBmb3IgbGVmdCBvZiAoIit0ZW1wLmRhdGErIikgLHIgZm9yIHJpZ2h0IG9mICgiK3RlbXAuZGF0YSsiKSIpOwogICAgICAgIGNoYXIgaW5wdXRWYWx1ZT1pbnB1dC5uZXh0KCkuY2hhckF0KDApOyAKICAgICAgICBpZihpbnB1dFZhbHVlPT0nbCcpewogICAgICAgICAgICBpZih0ZW1wLmxlZnQ9PW51bGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRlbXAubGVmdD1uZXdub2RlOwogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ2YWx1ZSBnb3Qgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIGxlZnQgb2YgKCIrdGVtcC5kYXRhKyIpIik7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH1lbHNlICB7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInZhbHVlIGxlZnQgdG8gKCIrdGVtcC5kYXRhKyIpIGlzIG9jY3VwaWVkIDFieSAoIit0ZW1wLmxlZnQuZGF0YSsiKSIpOwogICAgICAgICAgICAgICAgY3JlYXRlTm9kZSh0ZW1wLmxlZnQsbmV3bm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZihpbnB1dFZhbHVlPT0ncicpCiAgICAgICAgewogICAgICAgICAgICBpZih0ZW1wLnJpZ2h0PT1udWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0ZW1wLnJpZ2h0PW5ld25vZGU7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInZhbHVlIGdvdCBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gcmlnaHQgb2YgKCIrdGVtcC5kYXRhKyIpIik7CiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB9ZWxzZSAgewogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ2YWx1ZSByaWdodCB0byAoIit0ZW1wLmRhdGErIikgaXMgb2NjdXBpZWQgYnkgKCIrdGVtcC5yaWdodC5kYXRhKyIpIik7CiAgICAgICAgICAgICAgICBjcmVhdGVOb2RlKHRlbXAucmlnaHQsbmV3bm9kZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfWVsc2V7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5jb3JyZWN0IGlucHV0IHBseiB0cnkgYWdhaW4gLCBjb3JyZWN0bHkiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICB9CiAgICBwdWJsaWMgTm9kZSBnZW5lcmF0ZVRyZWUoKXsKICAgICAgICBpbnQgW10gYSA9IG5ldyBpbnRbMTBdOwogICAgICAgIGludCBpbmRleCA9IDA7IAogICAgICAgIHdoaWxlKGluZGV4PGEubGVuZ3RoKXsKICAgICAgICAgICAgYVtpbmRleF09Z2V0RGF0YSgpOwogICAgICAgICAgICBpbmRleCsrOwogICAgICAgIH0KICAgICAgICBpZihhLmxlbmd0aD09MCApewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgTm9kZSBuZXdub2RlPSBuZXcgTm9kZSgpOwogICAgICAgIC8qbmV3bm9kZS5sZWZ0PW51bGw7CiAgICAgICAgbmV3bm9kZS5yaWdodD1udWxsOyovCiAgICAgICAgcmV0dXJuIGdlbmVyYXRlVHJlZVdpdGhBcnJheShuZXdub2RlLGEsMCk7CgogICAgfQogICAgcHVibGljIE5vZGUgZ2VuZXJhdGVUcmVlV2l0aEFycmF5KE5vZGUgaGVhZCxpbnQgW10gYSxpbnQgaW5kZXgpewoKICAgICAgICBpZihpbmRleCA+PSBhLmxlbmd0aCkKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhdCBpbmRleCAiK2luZGV4KyIgdmFsdWUgaXMgIithW2luZGV4XSk7CiAgICAgICAgaWYoaGVhZD09bnVsbCkKICAgICAgICAgICAgaGVhZD0gbmV3IE5vZGUoKTsKICAgICAgICBoZWFkLmRhdGEgPSBhW2luZGV4XTsKICAgICAgICBoZWFkLmxlZnQ9Z2VuZXJhdGVUcmVlV2l0aEFycmF5KGhlYWQubGVmdCxhLGluZGV4KjIrMSk7CiAgICAgICAgaGVhZC5yaWdodD1nZW5lcmF0ZVRyZWVXaXRoQXJyYXkoaGVhZC5yaWdodCxhLGluZGV4KjIrMik7CiAgICAgICAgcmV0dXJuIGhlYWQ7CiAgICB9CgogICAgcHVibGljIEludGVnZXIgZ2V0RGF0YSgpCiAgICB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgdmFsdWUgdG8gaW5zZXJ0OiIpOwogICAgICAgIHJldHVybiAoSW50ZWdlcilpbnB1dC5uZXh0SW50KCk7CiAgICB9CgogICAgcHVibGljIHZvaWQgcHJpbnQoKQogICAgewogICAgICAgIGlub3JkZXIoaGVhZCk7CiAgICB9CiAgICBwdWJsaWMgdm9pZCBpbm9yZGVyKE5vZGUgbm9kZSkKICAgIHsKICAgICAgICBpZihub2RlIT1udWxsKQogICAgICAgIHsKICAgICAgICAgICAgaW5vcmRlcihub2RlLmxlZnQpOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obm9kZS5kYXRhKTsKICAgICAgICAgICAgaW5vcmRlcihub2RlLnJpZ2h0KTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm47CiAgICB9Cn0KCnB1YmxpYyBjbGFzcyBCaW5hcnlUcmVlV29ya2VyCnsKICAgIHN0YXRpYyBCaW5hcnlUcmVlIHRyZWVPYmogPSBudWxsOwogICAgc3RhdGljIFNjYW5uZXIgaW5wdXQgPSBuZXcgU2Nhbm5lcihTeXN0ZW0uaW4pOwogICAgcHVibGljIHN0YXRpYyB2b2lkIGRpc3BsYXltZW51KCkKICAgIHsKICAgICAgICBpbnQgY2hvaWNlOwogICAgICAgIGRvewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiBCYXNpYyBvcGVyYXRpb25zIG9uIGEgdHJlZToiKTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4gMS4gQ3JlYXRlIHRyZWUgIFxuIDIuIEluc2VydCBcbiAzLiBTZWFyY2ggdmFsdWUgXG4gNC4gcHJpbnQgbGlzdFxuIDUuIGdlbmVyYXRlIGEgdHJlZSBcbiBFbHNlLiBFeGl0IFxuIENob2ljZToiKTsKICAgICAgICAgICAgY2hvaWNlID0gaW5wdXQubmV4dEludCgpOwoKICAgICAgICAgICAgc3dpdGNoKGNob2ljZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIHRyZWVPYmogPSBjcmVhdGVCVHJlZSgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgIE5vZGUgbmV3bm9kZT0gbmV3IE5vZGUoKTsKICAgICAgICAgICAgICAgICAgICBuZXdub2RlLmRhdGEgPSBnZXREYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgbmV3bm9kZS5sZWZ0PW51bGw7CiAgICAgICAgICAgICAgICAgICAgbmV3bm9kZS5yaWdodD1udWxsOwogICAgICAgICAgICAgICAgICAgIHRyZWVPYmouY3JlYXRlTm9kZSh0cmVlT2JqLmhlYWQsbmV3bm9kZSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgLy9zZWFyY2hub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbm9yZGVyIHRyYXZlcnNhbCBvZiBsaXN0IGdpdmVzIGZvbGxvd3MiKTsKICAgICAgICAgICAgICAgICAgICB0cmVlT2JqLnByaW50KCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAgICAgTm9kZSB0ZW1wSGVhZCA9IHRyZWVPYmouZ2VuZXJhdGVUcmVlKCk7CiAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbm9yZGVyIHRyYXZlcnNhbCBvZiBsaXN0IHdpdGggaGVhZCA9ICgiK3RlbXBIZWFkLmRhdGErIilnaXZlcyBmb2xsb3dzIik7CiAgICAgICAgICAgICAgICAgICAgdHJlZU9iai5pbm9yZGVyKHRlbXBIZWFkKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9ICAgICAgIAogICAgICAgIH13aGlsZSh0cnVlKTsKICAgIH0KICAgIHB1YmxpYyBzdGF0aWMgSW50ZWdlciBnZXREYXRhKCkKICAgIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB2YWx1ZSB0byBpbnNlcnQ6Iik7CiAgICAgICAgcmV0dXJuIChJbnRlZ2VyKWlucHV0Lm5leHRJbnQoKTsKICAgIH0KICAgIHB1YmxpYyBzdGF0aWMgQmluYXJ5VHJlZSBjcmVhdGVCVHJlZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBCaW5hcnlUcmVlKCk7CiAgICB9CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgewogICAgICAgIGRpc3BsYXltZW51KCk7CiAgICB9Cn0=