#include <stdio.h>
#include <stdlib.h>
struct treenode
{
int data;
treenode* right;
treenode* left;
};
treenode* createnode (int data)
{
treenode* temp = (treenode*)malloc(sizeof(treenode));
temp->data = data;
temp->left = NULL;
temp->right = NULL;
return temp;
}
treenode* insertion (treenode* root, int data)
{
if(root == NULL)
{
root = createnode(data);
return root; // << it simply return the references of the root to if/else block according to the condition;
}
else
{
if(root->data > data)
{
root->left = insertion(root->left, data);
}
else
{
root->right = insertion(root->right, data);
}
return root; // << returns the initial root value to the main function so that the other comparisons can occur with root.
}
}
int heightcount (treenode* root)
{
if(root == NULL)
{
return NULL;
}
else
{
if(root->left == NULL && root->right == NULL)
{
return 0;
}
else
{
int counta = heightcount(root->right) + 1;
int countb = heightcount(root->left) + 1;
if(counta > countb)
return counta;
else
return countb;
}
}
}
int main()
{
treenode* root = NULL;
root = insertion (root, 10);
root = insertion (root, 15);
root = insertion (root, 5);
root = insertion (root, 1);
root = insertion (root, 6);
root = insertion (root, 11);
root = insertion (root, 16);
root = insertion (root, 20);
//root = insertion (root, 200);
printf("Height of the tree: %d", heightcount (root)-1);
printf("\nLevel: %d", heightcount (root));
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4Kc3RydWN0IHRyZWVub2RlCnsKICAgIGludCBkYXRhOwogICAgdHJlZW5vZGUqIHJpZ2h0OwogICAgdHJlZW5vZGUqIGxlZnQ7Cn07CnRyZWVub2RlKiBjcmVhdGVub2RlIChpbnQgZGF0YSkKewogICAgdHJlZW5vZGUqIHRlbXAgPSAodHJlZW5vZGUqKW1hbGxvYyhzaXplb2YodHJlZW5vZGUpKTsKICAgIHRlbXAtPmRhdGEgPSBkYXRhOwogICAgdGVtcC0+bGVmdCA9IE5VTEw7CiAgICB0ZW1wLT5yaWdodCA9IE5VTEw7CiAgICByZXR1cm4gdGVtcDsKfQp0cmVlbm9kZSogaW5zZXJ0aW9uICh0cmVlbm9kZSogcm9vdCwgaW50IGRhdGEpCnsKICAgIGlmKHJvb3QgPT0gTlVMTCkKICAgIHsKICAgICAgICByb290ID0gY3JlYXRlbm9kZShkYXRhKTsKICAgICAgICByZXR1cm4gcm9vdDsgLy8gPDwgaXQgc2ltcGx5IHJldHVybiB0aGUgcmVmZXJlbmNlcyBvZiB0aGUgcm9vdCB0byBpZi9lbHNlIGJsb2NrIGFjY29yZGluZyB0byB0aGUgY29uZGl0aW9uOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGlmKHJvb3QtPmRhdGEgPiBkYXRhKQogICAgICAgIHsKICAgICAgICAgICAgcm9vdC0+bGVmdCA9IGluc2VydGlvbihyb290LT5sZWZ0LCBkYXRhKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcm9vdC0+cmlnaHQgPSBpbnNlcnRpb24ocm9vdC0+cmlnaHQsIGRhdGEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcm9vdDsgLy8gPDwgcmV0dXJucyB0aGUgaW5pdGlhbCByb290IHZhbHVlIHRvIHRoZSBtYWluIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIG90aGVyIGNvbXBhcmlzb25zIGNhbiBvY2N1ciB3aXRoIHJvb3QuCiAgICB9Cn0KaW50IGhlaWdodGNvdW50ICh0cmVlbm9kZSogcm9vdCkKewogICAgaWYocm9vdCA9PSBOVUxMKQogICAgewogICAgICAgIHJldHVybiBOVUxMOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGlmKHJvb3QtPmxlZnQgPT0gTlVMTCAmJiByb290LT5yaWdodCA9PSBOVUxMKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGludCBjb3VudGEgPSAgaGVpZ2h0Y291bnQocm9vdC0+cmlnaHQpICsgMTsKICAgICAgICAgICAgaW50IGNvdW50YiA9ICBoZWlnaHRjb3VudChyb290LT5sZWZ0KSArIDE7CiAgICAgICAgICAgIGlmKGNvdW50YSA+IGNvdW50YikKICAgICAgICAgICAgICAgIHJldHVybiBjb3VudGE7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiBjb3VudGI7CgogICAgICAgIH0KICAgIH0KfQppbnQgbWFpbigpCnsKICAgIHRyZWVub2RlKiByb290ID0gTlVMTDsKICAgIHJvb3QgPSBpbnNlcnRpb24gKHJvb3QsIDEwKTsKICAgIHJvb3QgPSBpbnNlcnRpb24gKHJvb3QsIDE1KTsKICAgIHJvb3QgPSBpbnNlcnRpb24gKHJvb3QsIDUpOwogICAgcm9vdCA9IGluc2VydGlvbiAocm9vdCwgMSk7CiAgICByb290ID0gaW5zZXJ0aW9uIChyb290LCA2KTsKICAgIHJvb3QgPSBpbnNlcnRpb24gKHJvb3QsIDExKTsKICAgIHJvb3QgPSBpbnNlcnRpb24gKHJvb3QsIDE2KTsKICAgIHJvb3QgPSBpbnNlcnRpb24gKHJvb3QsIDIwKTsKICAgIC8vcm9vdCA9IGluc2VydGlvbiAocm9vdCwgMjAwKTsKCiAgICBwcmludGYoIkhlaWdodCBvZiB0aGUgdHJlZTogJWQiLCBoZWlnaHRjb3VudCAocm9vdCktMSk7CiAgICBwcmludGYoIlxuTGV2ZWw6ICVkIiwgaGVpZ2h0Y291bnQgKHJvb3QpKTsKCn0K