#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<queue>
using namespace std;
/* A tree node structure */
struct node
{
int data;
struct node *left;
struct node *right;
};
/* Returns level of given data value */
int getLevel(struct node *root, int data)
{
std::queue<struct node*> q;
q.push(root);
int level = 1;
while(!q.empty()){
q.push(NULL);
while(q.front() != NULL){
struct node *temp = q.front();
q.pop();
if(temp->data == data){
return level;
}
if(temp->left){
q.push(temp->left);
}
if(temp->right){
q.push(temp->right);
}
}
q.pop();
level = level+1;
}
return 0;
}
/* 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 = (struct node*)malloc(sizeof(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);
}
getchar();
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNzdGRsaWI+CiNpbmNsdWRlPGNzdGRpbz4KI2luY2x1ZGU8cXVldWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8qIEEgdHJlZSBub2RlIHN0cnVjdHVyZSAqLwpzdHJ1Y3Qgbm9kZQp7CglpbnQgZGF0YTsKCXN0cnVjdCBub2RlICpsZWZ0OwoJc3RydWN0IG5vZGUgKnJpZ2h0Owp9OwoKCi8qIFJldHVybnMgbGV2ZWwgb2YgZ2l2ZW4gZGF0YSB2YWx1ZSAqLwppbnQgZ2V0TGV2ZWwoc3RydWN0IG5vZGUgKnJvb3QsIGludCBkYXRhKQp7CiAgICBzdGQ6OnF1ZXVlPHN0cnVjdCBub2RlKj4gcTsKICAgIHEucHVzaChyb290KTsKICAgIGludCBsZXZlbCA9IDE7CiAgICB3aGlsZSghcS5lbXB0eSgpKXsKICAgICAgICBxLnB1c2goTlVMTCk7CiAgICAgICAgd2hpbGUocS5mcm9udCgpICE9IE5VTEwpewogICAgICAgICAgICBzdHJ1Y3Qgbm9kZSAqdGVtcCA9IHEuZnJvbnQoKTsKICAgICAgICAgICAgcS5wb3AoKTsKICAgICAgICAgICAgaWYodGVtcC0+ZGF0YSA9PSBkYXRhKXsKICAgICAgICAgICAgICAgIHJldHVybiBsZXZlbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZih0ZW1wLT5sZWZ0KXsKICAgICAgICAgICAgICAgIHEucHVzaCh0ZW1wLT5sZWZ0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZih0ZW1wLT5yaWdodCl7CiAgICAgICAgICAgICAgICBxLnB1c2godGVtcC0+cmlnaHQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHEucG9wKCk7CiAgICAgICAgbGV2ZWwgPSBsZXZlbCsxOwogICAgfQogICAgcmV0dXJuIDA7Cn0KCi8qIFV0aWxpdHkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IEJpbmFyeSBUcmVlIG5vZGUgKi8Kc3RydWN0IG5vZGUqIG5ld05vZGUoaW50IGRhdGEpCnsKCXN0cnVjdCBub2RlICp0ZW1wID0gbmV3IHN0cnVjdCBub2RlOwoJdGVtcC0+ZGF0YSA9IGRhdGE7Cgl0ZW1wLT5sZWZ0ID0gTlVMTDsKCXRlbXAtPnJpZ2h0ID0gTlVMTDsKCglyZXR1cm4gdGVtcDsKfQoKLyogRHJpdmVyIGZ1bmN0aW9uIHRvIHRlc3QgYWJvdmUgZnVuY3Rpb25zICovCmludCBtYWluKCkKewoJc3RydWN0IG5vZGUgKnJvb3QgPSAoc3RydWN0IG5vZGUqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGUpKTsKCWludCB4OwoKCS8qIENvbnN0cnVjdGluZyB0cmVlIGdpdmVuIGluIHRoZSBhYm92ZSBmaWd1cmUgKi8KCXJvb3QgPSBuZXdOb2RlKDMpOwoJcm9vdC0+bGVmdCA9IG5ld05vZGUoMik7Cglyb290LT5yaWdodCA9IG5ld05vZGUoNSk7Cglyb290LT5sZWZ0LT5sZWZ0ID0gbmV3Tm9kZSgxKTsKCXJvb3QtPmxlZnQtPnJpZ2h0ID0gbmV3Tm9kZSg0KTsKCglmb3IgKHggPSAxOyB4IDw9NTsgeCsrKQoJewoJaW50IGxldmVsID0gZ2V0TGV2ZWwocm9vdCwgeCk7CglpZiAobGV2ZWwpCgkJcHJpbnRmKCIgTGV2ZWwgb2YgJWQgaXMgJWRcbiIsIHgsIGdldExldmVsKHJvb3QsIHgpKTsKCWVsc2UKCQlwcmludGYoIiAlZCBpcyBub3QgcHJlc2VudCBpbiB0cmVlIFxuIiwgeCk7CgoJfQoKCWdldGNoYXIoKTsKCXJldHVybiAwOwp9Cg==