#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<malloc.h>
struct node
{
int info;
struct node * left;
struct node * right;
} ;
struct node * getnode( int data) ;
struct node * buildtree( int pre[ ] ,int start,int end) ;
int search( int pre[ ] ,int start,int end ,int temp) ;
void in( struct node * ) ;
int main( )
{
//int pre[]={10,5,2,7,12,11,13};
//int pre[]={10,2,1,12,13};
//int pre[]={10,2,5,12,11,13};
int n = sizeof ( pre) / sizeof ( pre[ 0 ] ) ;
struct node * root= buildtree( pre,0 ,n- 1 ) ;
cout << "\n \t " ;
in( root) ;
getch( ) ;
return 0 ;
}
struct node * getnode( int data)
{
struct node * temp = ( struct node * ) malloc ( sizeof ( struct node) ) ;
temp- > right = temp- > left = NULL ;
temp- > info = data;
return temp;
}
struct node * buildtree( int pre[ ] ,int start,int end)
{
static int preindex = 0 ;
//boundary condition
if ( start > end)
return NULL ;
int temp = pre[ preindex++ ] ;
struct node * tnode = getnode( temp) ;
//if no child is present
if ( start== end)
return tnode;
//search for the first element which is greater than temp which will begin right subtree
int index = search( pre,start,end,temp) ;
//cout<<"\n index = "<<index;
//cout<<"\n start = "<<start;
tnode- > left = buildtree( pre,start + 1 ,index- 1 ) ;
tnode- > right = buildtree( pre,index,end) ;
return tnode;
}
int search( int pre[ ] ,int start,int end ,int temp)
{
int i;
cout << "\n temp = " << temp;
for ( i= start; i<= end; i++ )
{
if ( pre[ i] > temp)
return i;
}
//cout<<"\n Not found for temp = "<<temp ;
//If no elemnt is found that is der is no right subtree so return i such that start > end will automatically return NULL
return i;
}
void in( struct node * root)
{
if ( root! = NULL )
{
in( root- > left) ;
cout << " " << root- > info;
in( root- > right) ;
}
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8aW9zdHJlYW0uaD4KI2luY2x1ZGU8Y29uaW8uaD4KI2luY2x1ZGU8bWFsbG9jLmg+CnN0cnVjdCBub2RlCnsKCWludCBpbmZvOwoJc3RydWN0IG5vZGUgKmxlZnQ7CglzdHJ1Y3Qgbm9kZSAqcmlnaHQ7Cgp9OwpzdHJ1Y3Qgbm9kZSAqZ2V0bm9kZShpbnQgZGF0YSk7CnN0cnVjdCBub2RlICpidWlsZHRyZWUoaW50IHByZVtdLGludCBzdGFydCxpbnQgZW5kKTsKaW50IHNlYXJjaChpbnQgcHJlW10saW50IHN0YXJ0LGludCBlbmQgLGludCB0ZW1wKTsKdm9pZCBpbihzdHJ1Y3Qgbm9kZSAqKTsKaW50IG1haW4oKQp7CgovL2ludCBwcmVbXT17MTAsNSwyLDcsMTIsMTEsMTN9OwovL2ludCBwcmVbXT17MTAsMiwxLDEyLDEzfTsKLy9pbnQgcHJlW109ezEwLDIsNSwxMiwxMSwxM307CglpbnQgbiA9IHNpemVvZihwcmUpL3NpemVvZihwcmVbMF0pOwoJc3RydWN0IG5vZGUgKnJvb3Q9YnVpbGR0cmVlKHByZSwwLG4tMSk7Cgljb3V0PDwiXG5cdCI7Cglpbihyb290KTsKCgoKZ2V0Y2goKTsKcmV0dXJuIDA7Cn0Kc3RydWN0IG5vZGUgKmdldG5vZGUoaW50IGRhdGEpCnsKCXN0cnVjdCBub2RlICp0ZW1wID0gKHN0cnVjdCBub2RlICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwoJdGVtcC0+cmlnaHQgPSB0ZW1wLT5sZWZ0ID0gTlVMTDsKCXRlbXAtPmluZm8gPSBkYXRhOwoJcmV0dXJuIHRlbXA7Cn0Kc3RydWN0IG5vZGUgKmJ1aWxkdHJlZShpbnQgcHJlW10saW50IHN0YXJ0LGludCBlbmQpCnsKCXN0YXRpYyBpbnQgcHJlaW5kZXggPSAwOwoJLy9ib3VuZGFyeSBjb25kaXRpb24KCWlmKHN0YXJ0ID4gZW5kKQoJcmV0dXJuIE5VTEw7CgkKCWludCB0ZW1wID0gcHJlW3ByZWluZGV4KytdOwoJc3RydWN0IG5vZGUgKnRub2RlID0gZ2V0bm9kZSh0ZW1wKTsKCS8vaWYgbm8gY2hpbGQgaXMgcHJlc2VudAoJaWYoc3RhcnQ9PWVuZCkKCXJldHVybiB0bm9kZTsKCQoJLy9zZWFyY2ggZm9yIHRoZSBmaXJzdCBlbGVtZW50IHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiB0ZW1wIHdoaWNoIHdpbGwgYmVnaW4gcmlnaHQgc3VidHJlZQoJaW50IGluZGV4ID0gc2VhcmNoKHByZSxzdGFydCxlbmQsdGVtcCk7Ci8vY291dDw8IlxuIGluZGV4ID0gIjw8aW5kZXg7Ci8vY291dDw8IlxuIHN0YXJ0ID0gIjw8c3RhcnQ7CnRub2RlLT5sZWZ0ID0gYnVpbGR0cmVlKHByZSxzdGFydCArIDEsaW5kZXgtMSk7CnRub2RlLT5yaWdodCA9IGJ1aWxkdHJlZShwcmUsaW5kZXgsZW5kKTsKCgpyZXR1cm4gdG5vZGU7CgoKCn0KCmludCBzZWFyY2goaW50IHByZVtdLGludCBzdGFydCxpbnQgZW5kICxpbnQgdGVtcCkKewoJaW50IGk7Cgljb3V0PDwiXG4gdGVtcCA9ICI8PHRlbXA7Cglmb3IoaT1zdGFydDtpPD1lbmQ7aSsrKQoJewoJCWlmKHByZVtpXSA+IHRlbXApCgkJcmV0dXJuIGk7CgkKCX0KLy9jb3V0PDwiXG4gTm90IGZvdW5kIGZvciB0ZW1wID0gIjw8dGVtcCA7Ci8vSWYgbm8gZWxlbW50IGlzIGZvdW5kIHRoYXQgaXMgZGVyIGlzIG5vIHJpZ2h0IHN1YnRyZWUgc28gcmV0dXJuIGkgc3VjaCB0aGF0IHN0YXJ0ID4gZW5kIHdpbGwgYXV0b21hdGljYWxseSByZXR1cm4gTlVMTApyZXR1cm4gaTsKCgp9CnZvaWQgaW4oc3RydWN0IG5vZGUgKnJvb3QpCnsKCWlmKHJvb3QhPU5VTEwpCgl7CgkJaW4ocm9vdC0+bGVmdCk7CgkJY291dDw8IiAgIjw8cm9vdC0+aW5mbzsKCQlpbihyb290LT5yaWdodCk7Cgl9Cgp9Cg==