#include<stdio.h>
/* A tree node structure */
struct node
{
int data;
struct node * left;
struct node * right;
} ;
/* Helper function for getLevel(). It returns level of the data if data is
present in tree, otherwise returns 0.*/
int getLevelUtil( struct node * node, int data, int level)
{
if ( node == NULL)
return 0 ;
if ( node-> data == data)
return level;
else
{
getLevelUtil( node-> left, data, level+ 1 ) ;
getLevelUtil( node-> right, data, level+ 1 ) ;
}
/* Returns level of given data value */
int getLevel( struct node * node, int data)
{
return getLevelUtil( node, data, 1 ) ;
}
/* Utility function to create a new Binary Tree node */
struct node* newNode( int data)
{
struct node * temp = new struct node;
temp-> data = data;
temp-> left = NULL;
temp-> right = NULL;
return temp;
}
/* Driver function to test above functions */
int main( )
{
struct node * root = new struct node;
int x;
/* Constructing tree given in the above figure */
root = newNode( 3 ) ;
root-> left = newNode( 2 ) ;
root-> right = newNode( 5 ) ;
root-> left-> left = newNode( 1 ) ;
root-> left-> right = newNode( 4 ) ;
for ( x = 1 ; x <= 5 ; x++ )
{
int level = getLevel( root, x) ;
if ( level)
printf ( " Level of %d is %d\n " , x
, getLevel
( root
, x
) ) ; else
printf ( " %d is not present in tree \n " , x
) ;
}
return 0 ;
}
I2luY2x1ZGU8c3RkaW8uaD4KIAovKiBBIHRyZWUgbm9kZSBzdHJ1Y3R1cmUgKi8Kc3RydWN0IG5vZGUKewogICAgaW50IGRhdGE7CiAgICBzdHJ1Y3Qgbm9kZSAqbGVmdDsKICAgIHN0cnVjdCBub2RlICpyaWdodDsKfTsKIAovKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGdldExldmVsKCkuICBJdCByZXR1cm5zIGxldmVsIG9mIHRoZSBkYXRhIGlmIGRhdGEgaXMKICAgcHJlc2VudCBpbiB0cmVlLCBvdGhlcndpc2UgcmV0dXJucyAwLiovCmludCBnZXRMZXZlbFV0aWwoc3RydWN0IG5vZGUgKm5vZGUsIGludCBkYXRhLCBpbnQgbGV2ZWwpCnsKICAgIGlmIChub2RlID09IE5VTEwpCiAgICAgICAgcmV0dXJuIDA7CiAKICAgIGlmIChub2RlLT5kYXRhID09IGRhdGEpCiAgICAgICAgcmV0dXJuIGxldmVsOwogIGVsc2UKICB7CiAgICAgZ2V0TGV2ZWxVdGlsKG5vZGUtPmxlZnQsIGRhdGEsIGxldmVsKzEpOwogICAgIGdldExldmVsVXRpbChub2RlLT5yaWdodCwgZGF0YSwgbGV2ZWwrMSk7CiAgIAogICB9CiAKLyogUmV0dXJucyBsZXZlbCBvZiBnaXZlbiBkYXRhIHZhbHVlICovCmludCBnZXRMZXZlbChzdHJ1Y3Qgbm9kZSAqbm9kZSwgaW50IGRhdGEpCnsKICAgIHJldHVybiBnZXRMZXZlbFV0aWwobm9kZSxkYXRhLDEpOwp9CiAKLyogVXRpbGl0eSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgQmluYXJ5IFRyZWUgbm9kZSAqLwpzdHJ1Y3Qgbm9kZSogbmV3Tm9kZShpbnQgZGF0YSkKewogICAgc3RydWN0IG5vZGUgKnRlbXAgPSBuZXcgc3RydWN0IG5vZGU7CiAgICB0ZW1wLT5kYXRhID0gZGF0YTsKICAgIHRlbXAtPmxlZnQgPSBOVUxMOwogICAgdGVtcC0+cmlnaHQgPSBOVUxMOwogCiAgICByZXR1cm4gdGVtcDsKfQogCi8qIERyaXZlciBmdW5jdGlvbiB0byB0ZXN0IGFib3ZlIGZ1bmN0aW9ucyAqLwppbnQgbWFpbigpCnsKICAgIHN0cnVjdCBub2RlICpyb290ID0gbmV3IHN0cnVjdCBub2RlOwogICAgaW50IHg7CiAKICAgIC8qIENvbnN0cnVjdGluZyB0cmVlIGdpdmVuIGluIHRoZSBhYm92ZSBmaWd1cmUgKi8KICAgIHJvb3QgPSBuZXdOb2RlKDMpOwogICAgcm9vdC0+bGVmdCA9IG5ld05vZGUoMik7CiAgICByb290LT5yaWdodCA9IG5ld05vZGUoNSk7CiAgICByb290LT5sZWZ0LT5sZWZ0ID0gbmV3Tm9kZSgxKTsKICAgIHJvb3QtPmxlZnQtPnJpZ2h0ID0gbmV3Tm9kZSg0KTsKIAogICAgZm9yICh4ID0gMTsgeCA8PTU7IHgrKykKICAgIHsKICAgICAgaW50IGxldmVsID0gZ2V0TGV2ZWwocm9vdCwgeCk7CiAgICAgIGlmIChsZXZlbCkKICAgICAgICBwcmludGYoIiBMZXZlbCBvZiAlZCBpcyAlZFxuIiwgeCwgZ2V0TGV2ZWwocm9vdCwgeCkpOwogICAgICBlbHNlCiAgICAgICAgcHJpbnRmKCIgJWQgaXMgbm90IHByZXNlbnQgaW4gdHJlZSBcbiIsIHgpOwogCiAgICB9CiAKICAgIGdldGNoYXIoKTsKICAgIHJldHVybiAwOwp9
compilation info
prog.c: In function 'newNode':
prog.c:36:25: error: 'new' undeclared (first use in this function)
struct node *temp = new struct node;
^
prog.c:36:25: note: each undeclared identifier is reported only once for each function it appears in
prog.c:36:29: error: expected ',' or ';' before 'struct'
struct node *temp = new struct node;
^
prog.c: In function 'getLevelUtil':
prog.c:45:5: warning: 'main' is normally a non-static function [-Wmain]
int main()
^
prog.c: In function 'main':
prog.c:47:25: error: 'new' undeclared (first use in this function)
struct node *root = new struct node;
^
prog.c:47:29: error: expected ',' or ';' before 'struct'
struct node *root = new struct node;
^
prog.c: In function 'getLevelUtil':
prog.c:69:1: error: expected declaration or statement at end of input
}
^
prog.c:69:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
stdout