#include<stdio.h>
#include<stdlib.h>
struct TreeNode
{
int data;
TreeNode* left;
TreeNode* right;
};
void printTree(TreeNode* root, int space = 0, int indent = 4)
{
if (root == nullptr)
return;
space += indent;
printTree(root->right, space);
printf("\n");
for (int i = 0; i < space; i++)
{
printf(" ");
}
printf("%d\n", root->data);
printTree(root->left, space);
}
TreeNode* createNode(int data)
{
TreeNode* temp = (TreeNode *)malloc(sizeof(TreeNode));
temp->data = data;
temp->left = temp->right = NULL;
return temp;
}
TreeNode* insertion_BST(TreeNode* root, int data)
{
if(root==NULL)
{
root = createNode(data);
return root;
}
else
{
if(data>root->data)
{
root->right = insertion_BST(root->right, data);
}
else if(data<root->data)
{
root->left = insertion_BST(root->left, data);
}
return root;
}
}
TreeNode* search_BST(TreeNode* root, int key)
{
if(root==NULL)
return NULL;
else
{
if(key==root->data)
{
return root;
}
else if(key>root->data)
{
TreeNode* position = search_BST(root->right, key);
return position;
}
else
{
TreeNode* position = search_BST(root->left, key);
return position;
}
}
}
bool search_BST_bool(TreeNode* root, int key)
{
if(root==NULL)
return false;
else
{
if(key==root->data)
{
return true;
}
else if(key>root->data)
{
bool friend_answer = search_BST(root->right, key);
return friend_answer;
}
else
{
bool friend_answer = search_BST(root->left, key);
return friend_answer;
}
}
}
int maximum(int a, int b)
{
return a > b ? a : b;
}
int height(TreeNode* root)
{
if((root==NULL) || (root->left==NULL && root->right==NULL))
{
return 0;
}
else
{
int left_child_height = height(root->left);
int right_child_height = height(root->right);
return maximum(left_child_height, right_child_height) + 1;
}
}
int main()
{
TreeNode* root = NULL;
root = insertion_BST(root, 15);
root = insertion_BST(root, 13);
root = insertion_BST(root, 14);
root = insertion_BST(root, 18);
root = insertion_BST(root, 16);
root = insertion_BST(root, 100);
root = insertion_BST(root, 200);
root = insertion_BST(root, 300);
printTree(root);
printf("Your height is: %d\n",height(root));
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CnN0cnVjdCBUcmVlTm9kZQp7CiAgICBpbnQgZGF0YTsKICAgIFRyZWVOb2RlKiBsZWZ0OwogICAgVHJlZU5vZGUqIHJpZ2h0Owp9OwoKCnZvaWQgcHJpbnRUcmVlKFRyZWVOb2RlKiByb290LCBpbnQgc3BhY2UgPSAwLCBpbnQgaW5kZW50ID0gNCkKewogICAgaWYgKHJvb3QgPT0gbnVsbHB0cikKICAgICAgICByZXR1cm47CgoKICAgIHNwYWNlICs9IGluZGVudDsKICAgIHByaW50VHJlZShyb290LT5yaWdodCwgc3BhY2UpOwoKICAgIHByaW50ZigiXG4iKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3BhY2U7IGkrKykKICAgIHsKICAgICAgICBwcmludGYoIiAiKTsKICAgIH0KICAgIHByaW50ZigiJWRcbiIsIHJvb3QtPmRhdGEpOwoKICAgIHByaW50VHJlZShyb290LT5sZWZ0LCBzcGFjZSk7Cn0KClRyZWVOb2RlKiBjcmVhdGVOb2RlKGludCBkYXRhKQp7CiAgICBUcmVlTm9kZSogdGVtcCA9IChUcmVlTm9kZSAqKW1hbGxvYyhzaXplb2YoVHJlZU5vZGUpKTsKICAgIHRlbXAtPmRhdGEgPSBkYXRhOwogICAgdGVtcC0+bGVmdCA9IHRlbXAtPnJpZ2h0ID0gTlVMTDsKICAgIHJldHVybiB0ZW1wOwp9CgpUcmVlTm9kZSogaW5zZXJ0aW9uX0JTVChUcmVlTm9kZSogcm9vdCwgaW50IGRhdGEpCnsKICAgIGlmKHJvb3Q9PU5VTEwpCiAgICB7CiAgICAgICAgcm9vdCA9IGNyZWF0ZU5vZGUoZGF0YSk7CiAgICAgICAgcmV0dXJuIHJvb3Q7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgaWYoZGF0YT5yb290LT5kYXRhKQogICAgICAgIHsKICAgICAgICAgICAgcm9vdC0+cmlnaHQgPSBpbnNlcnRpb25fQlNUKHJvb3QtPnJpZ2h0LCBkYXRhKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZihkYXRhPHJvb3QtPmRhdGEpCiAgICAgICAgewogICAgICAgICAgICByb290LT5sZWZ0ID0gaW5zZXJ0aW9uX0JTVChyb290LT5sZWZ0LCBkYXRhKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiByb290OwogICAgfQp9CgoKVHJlZU5vZGUqIHNlYXJjaF9CU1QoVHJlZU5vZGUqIHJvb3QsIGludCBrZXkpCnsKICAgIGlmKHJvb3Q9PU5VTEwpCiAgICAgICAgcmV0dXJuIE5VTEw7CiAgICBlbHNlCiAgICB7CiAgICAgICAgaWYoa2V5PT1yb290LT5kYXRhKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHJvb3Q7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoa2V5PnJvb3QtPmRhdGEpCiAgICAgICAgewogICAgICAgICAgICBUcmVlTm9kZSogcG9zaXRpb24gPSBzZWFyY2hfQlNUKHJvb3QtPnJpZ2h0LCBrZXkpOwogICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIFRyZWVOb2RlKiBwb3NpdGlvbiA9IHNlYXJjaF9CU1Qocm9vdC0+bGVmdCwga2V5KTsKICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICAgIH0KICAgIH0KfQoKCmJvb2wgc2VhcmNoX0JTVF9ib29sKFRyZWVOb2RlKiByb290LCBpbnQga2V5KQp7CiAgICBpZihyb290PT1OVUxMKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIGVsc2UKICAgIHsKICAgICAgICBpZihrZXk9PXJvb3QtPmRhdGEpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZihrZXk+cm9vdC0+ZGF0YSkKICAgICAgICB7CiAgICAgICAgICAgIGJvb2wgZnJpZW5kX2Fuc3dlciA9IHNlYXJjaF9CU1Qocm9vdC0+cmlnaHQsIGtleSk7CiAgICAgICAgICAgIHJldHVybiBmcmllbmRfYW5zd2VyOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBib29sIGZyaWVuZF9hbnN3ZXIgPSBzZWFyY2hfQlNUKHJvb3QtPmxlZnQsIGtleSk7CiAgICAgICAgICAgIHJldHVybiBmcmllbmRfYW5zd2VyOwogICAgICAgIH0KICAgIH0KfQoKCmludCBtYXhpbXVtKGludCBhLCBpbnQgYikKewogICAgcmV0dXJuIGEgPiBiID8gYSA6IGI7Cn0KCgppbnQgaGVpZ2h0KFRyZWVOb2RlKiByb290KQp7CiAgICBpZigocm9vdD09TlVMTCkgfHwgKHJvb3QtPmxlZnQ9PU5VTEwgJiYgcm9vdC0+cmlnaHQ9PU5VTEwpKQogICAgewogICAgICAgIHJldHVybiAwOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGludCBsZWZ0X2NoaWxkX2hlaWdodCA9IGhlaWdodChyb290LT5sZWZ0KTsKICAgICAgICBpbnQgcmlnaHRfY2hpbGRfaGVpZ2h0ID0gaGVpZ2h0KHJvb3QtPnJpZ2h0KTsKICAgICAgICByZXR1cm4gbWF4aW11bShsZWZ0X2NoaWxkX2hlaWdodCwgcmlnaHRfY2hpbGRfaGVpZ2h0KSArIDE7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgVHJlZU5vZGUqIHJvb3QgPSBOVUxMOwoKICAgIHJvb3QgPSBpbnNlcnRpb25fQlNUKHJvb3QsIDE1KTsKICAgIHJvb3QgPSBpbnNlcnRpb25fQlNUKHJvb3QsIDEzKTsKICAgIHJvb3QgPSBpbnNlcnRpb25fQlNUKHJvb3QsIDE0KTsKICAgIHJvb3QgPSBpbnNlcnRpb25fQlNUKHJvb3QsIDE4KTsKICAgIHJvb3QgPSBpbnNlcnRpb25fQlNUKHJvb3QsIDE2KTsKCiAgICByb290ID0gaW5zZXJ0aW9uX0JTVChyb290LCAxMDApOwogICAgcm9vdCA9IGluc2VydGlvbl9CU1Qocm9vdCwgMjAwKTsKICAgIHJvb3QgPSBpbnNlcnRpb25fQlNUKHJvb3QsIDMwMCk7CgoKCgogICAgcHJpbnRUcmVlKHJvb3QpOwoKCiAgICBwcmludGYoIllvdXIgaGVpZ2h0IGlzOiAlZFxuIixoZWlnaHQocm9vdCkpOwoKICAgIHJldHVybiAwOwoKCgoKCgp9Cg==