#include"stdio.h"
#include"stdlib.h"
#define N 3
struct node
{
int info;
struct node * child[ N] ;
} ;
struct node * Root= NULL,* dRoot= NULL;
int dIndex= 0 , sIndex= 0 ;
struct node* createNode( int data) //Function to create a new node
{
struct node * root;
root
= ( struct node
* ) malloc ( sizeof ( struct node
) ) ; root-> info= data;
for ( int k= 0 ; k< N; k++ )
root-> child[ k] = NULL;
return root;
}
struct node * createTree( ) //Function to create Tree
{
struct node * root;
root= createNode( 28 ) ;
root-> child[ 0 ] = createNode( 22 ) ;
root-> child[ 1 ] = createNode( 8 ) ;
root-> child[ 2 ] = createNode( 12 ) ;
root-> child[ 0 ] -> child[ 0 ] = createNode( 2 ) ;
root-> child[ 0 ] -> child[ 1 ] = createNode( 7 ) ;
root-> child[ 1 ] -> child[ 0 ] = createNode( 13 ) ;
root-> child[ 2 ] -> child[ 0 ] = createNode( 19 ) ;
root-> child[ 2 ] -> child[ 1 ] = createNode( 25 ) ;
root-> child[ 2 ] -> child[ 2 ] = createNode( 24 ) ;
return root;
}
void serialize( struct node* root, int arr[ ] ) //Function to serialize Tree
{
if ( root== NULL)
{
arr[ sIndex] =- 1 ;
sIndex++;
return ;
}
arr[ sIndex] = root-> info;
sIndex++;
for ( int k= 0 ; k< N; k++ )
serialize( root-> child[ k] , arr) ;
}
struct node* deserialize( struct node * root, int arr[ ] ) //Function for deserialization
{
if ( arr[ dIndex] == ( - 1 ) || dIndex== sIndex- 1 )
{
dIndex++;
return NULL;
}
root= createNode( arr[ dIndex] ) ;
dIndex++;
for ( int k= 0 ; k< N; k++ )
{
root-> child[ k] = deserialize( root-> child[ k] , arr) ;
}
return root;
}
void Travers( struct node* root) //Function to traverse Tree
{
if ( root== NULL)
return ;
for ( int k= 0 ; k< N; k++ )
Travers( root-> child[ k] ) ;
}
void main( ) {
int array[ 50 ] ;
Root= createTree( ) ; //Creating Tree and address of root node returns to Root pointer
printf ( "The elements of created tree : " ) ; Travers( Root) ; //Displaying the tree by traversing
serialize( Root, array) ; //Serialize the tree
printf ( "\n The elements of tree in serialized form : " ) ; for ( int j= 0 ; j< sIndex; j++ )
printf ( "%d " , array
[ j
] ) ; //Displaying the Tree in serialized form printf ( " \n The elements of tree in deserialized form : " ) ; dRoot= deserialize( dRoot, array) ; //Deserialing
Travers( dRoot) ; //Displaying the Tree after retrieving after deserialization
}
I2luY2x1ZGUic3RkaW8uaCIKI2luY2x1ZGUic3RkbGliLmgiCiNkZWZpbmUgTiAzCnN0cnVjdCBub2RlIAp7CiBpbnQgaW5mbzsKIHN0cnVjdCBub2RlICpjaGlsZFtOXTsKfTsKc3RydWN0IG5vZGUgKlJvb3Q9TlVMTCwqZFJvb3Q9TlVMTDsKaW50IGRJbmRleD0wLHNJbmRleD0wOwpzdHJ1Y3Qgbm9kZSogY3JlYXRlTm9kZShpbnQgZGF0YSkgICAgICAgICAgICAgIC8vRnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IG5vZGUKewogc3RydWN0IG5vZGUgKiByb290Owogcm9vdD0oc3RydWN0IG5vZGUqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGUpKTsKIHJvb3QtPmluZm89ZGF0YTsKIGZvcihpbnQgaz0wO2s8TjtrKyspCiByb290LT5jaGlsZFtrXT1OVUxMOwogcmV0dXJuIHJvb3Q7Cn0Kc3RydWN0IG5vZGUgKiBjcmVhdGVUcmVlKCkgICAgICAgICAgICAgICAgICAgIC8vRnVuY3Rpb24gdG8gY3JlYXRlIFRyZWUgCnsKIHN0cnVjdCBub2RlICogcm9vdDsKIHJvb3Q9Y3JlYXRlTm9kZSgyOCk7CiByb290LT5jaGlsZFswXT1jcmVhdGVOb2RlKDIyKTsKIHJvb3QtPmNoaWxkWzFdPWNyZWF0ZU5vZGUoOCk7CiByb290LT5jaGlsZFsyXT1jcmVhdGVOb2RlKDEyKTsKIHJvb3QtPmNoaWxkWzBdLT5jaGlsZFswXT1jcmVhdGVOb2RlKDIpOwogcm9vdC0+Y2hpbGRbMF0tPmNoaWxkWzFdPWNyZWF0ZU5vZGUoNyk7CiByb290LT5jaGlsZFsxXS0+Y2hpbGRbMF09Y3JlYXRlTm9kZSgxMyk7CiByb290LT5jaGlsZFsyXS0+Y2hpbGRbMF09Y3JlYXRlTm9kZSgxOSk7CiByb290LT5jaGlsZFsyXS0+Y2hpbGRbMV09Y3JlYXRlTm9kZSgyNSk7CiByb290LT5jaGlsZFsyXS0+Y2hpbGRbMl09Y3JlYXRlTm9kZSgyNCk7CnJldHVybiByb290Owp9CnZvaWQgc2VyaWFsaXplKHN0cnVjdCBub2RlKiByb290LGludCBhcnJbXSkgICAgICAvL0Z1bmN0aW9uIHRvIHNlcmlhbGl6ZSBUcmVlIAp7CiBpZihyb290PT1OVUxMKQogewogYXJyW3NJbmRleF09LTE7CiBzSW5kZXgrKzsKIHJldHVybjsKIH0KIGFycltzSW5kZXhdPXJvb3QtPmluZm87CiBzSW5kZXgrKzsKIGZvcihpbnQgaz0wO2s8TjtrKyspCiBzZXJpYWxpemUocm9vdC0+Y2hpbGRba10sYXJyKTsKfQpzdHJ1Y3Qgbm9kZSogZGVzZXJpYWxpemUoc3RydWN0IG5vZGUgKiByb290LGludCBhcnJbXSkgLy9GdW5jdGlvbiBmb3IgZGVzZXJpYWxpemF0aW9uIAp7CiBpZihhcnJbZEluZGV4XT09KC0xKSB8fCBkSW5kZXg9PXNJbmRleC0xKQogewogZEluZGV4Kys7CiByZXR1cm4gTlVMTDsKIH0KIHJvb3Q9Y3JlYXRlTm9kZShhcnJbZEluZGV4XSk7CiBkSW5kZXgrKzsKIGZvcihpbnQgaz0wO2s8TjtrKyspCiB7CiByb290LT5jaGlsZFtrXT1kZXNlcmlhbGl6ZShyb290LT5jaGlsZFtrXSxhcnIpOwogfQpyZXR1cm4gcm9vdDsKfQp2b2lkIFRyYXZlcnMoc3RydWN0IG5vZGUqIHJvb3QpICAgICAgICAgLy9GdW5jdGlvbiB0byB0cmF2ZXJzZSBUcmVlIAp7CiBpZihyb290PT1OVUxMKQogcmV0dXJuOwogcHJpbnRmKCIgJWQiLHJvb3QtPmluZm8pOwogZm9yKGludCBrPTA7azxOO2srKykKIFRyYXZlcnMocm9vdC0+Y2hpbGRba10pOwp9CnZvaWQgbWFpbigpewogaW50IGFycmF5WzUwXTsKIFJvb3Q9Y3JlYXRlVHJlZSgpOyAgICAgICAgICAgICAgICAgICAvL0NyZWF0aW5nIFRyZWUgYW5kIGFkZHJlc3Mgb2Ygcm9vdCBub2RlIHJldHVybnMgdG8gUm9vdCBwb2ludGVyIAogcHJpbnRmKCJUaGUgZWxlbWVudHMgb2YgY3JlYXRlZCB0cmVlIDogIik7CiBUcmF2ZXJzKFJvb3QpOyAgICAgICAgICAgICAgICAgICAgICAvL0Rpc3BsYXlpbmcgdGhlIHRyZWUgYnkgdHJhdmVyc2luZwogc2VyaWFsaXplKFJvb3QsYXJyYXkpOyAgICAgICAgICAgICAgLy9TZXJpYWxpemUgdGhlIHRyZWUgCiBwcmludGYoIlxuVGhlIGVsZW1lbnRzIG9mIHRyZWUgaW4gc2VyaWFsaXplZCBmb3JtIDogIik7CiBmb3IoaW50IGo9MDtqPHNJbmRleDtqKyspCiBwcmludGYoIiVkICIsYXJyYXlbal0pOyAgICAgICAgICAgIC8vRGlzcGxheWluZyB0aGUgVHJlZSBpbiBzZXJpYWxpemVkIGZvcm0KIHByaW50ZigiIFxuVGhlIGVsZW1lbnRzIG9mIHRyZWUgaW4gZGVzZXJpYWxpemVkIGZvcm0gOiAiKTsKIGRSb290PWRlc2VyaWFsaXplKGRSb290LGFycmF5KTsgICAgLy9EZXNlcmlhbGluZyAKIFRyYXZlcnMoZFJvb3QpOyAgICAgICAgICAgICAgICAgICAgLy9EaXNwbGF5aW5nIHRoZSBUcmVlIGFmdGVyIHJldHJpZXZpbmcgYWZ0ZXIgZGVzZXJpYWxpemF0aW9uIAp9