#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct node{
int value;
struct node *left;
struct node *right;
};
typedef struct node Node;
void closest_element(Node *root, int value, int *min){
if(!root)
return ;
int diff
= abs(root
->value
- value
);
*min = diff;
}
/* Case 2 : Look for in left subtree */
if(root->value > value)
closest_element(root->left, value, min);
else
/* Case 3 : Look for in right subtree */
closest_element(root->right, value, min);
}
Node * create_node(int value){
Node
* temp
= (Node
*)malloc(sizeof(Node
)); temp->value = value;
temp->right= NULL;
temp->left = NULL;
return temp;
}
Node * addNode(Node *node, int value){
if(node == NULL){
return create_node(value);
}
else{
if (node->value > value){
node->left = addNode(node->left, value);
}
else{
node->right = addNode(node->right, value);
}
}
return node;
}
/* Driver program for the function written above */
int main(){
Node *root = NULL;
Node * last = NULL;
Node *ptrToHead = NULL;
int min = 100;
//Creating a binary tree
root = addNode(root,30);
root = addNode(root,20);
root = addNode(root,21);
root = addNode(root,40);
root = addNode(root,31);
closest_element(root, 29, &min);
printf("Closest element : %d", min
+ 29 ); return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPG1hdGguaD4KCnN0cnVjdCBub2RlewogICAgICAgIGludCB2YWx1ZTsKICAgICAgICBzdHJ1Y3Qgbm9kZSAqbGVmdDsKICAgICAgICBzdHJ1Y3Qgbm9kZSAqcmlnaHQ7Cn07CnR5cGVkZWYgc3RydWN0IG5vZGUgTm9kZTsKIAp2b2lkIGNsb3Nlc3RfZWxlbWVudChOb2RlICpyb290LCBpbnQgdmFsdWUsIGludCAqbWluKXsKIAogICAgICAgIGlmKCFyb290KQogICAgICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgCiAgICAgICAgaW50IGRpZmYgPSBhYnMocm9vdC0+dmFsdWUgLSB2YWx1ZSk7CiAgICAgIAogICAgICAgIGlmKGFicygqbWluKSA+IGFicyhkaWZmKSl7CiAgICAgICAgICAgICAgICAqbWluID0gZGlmZjsKICAgICAgICB9CiAgICAgICAgLyogQ2FzZSAyIDogTG9vayBmb3IgaW4gbGVmdCBzdWJ0cmVlICovCiAgICAgICAgaWYocm9vdC0+dmFsdWUgPiB2YWx1ZSkKICAgICAgICAgICAgICAgIGNsb3Nlc3RfZWxlbWVudChyb290LT5sZWZ0LCB2YWx1ZSwgbWluKTsKICAgICAgICBlbHNlCiAgICAgICAgLyogQ2FzZSAzIDogTG9vayBmb3IgaW4gcmlnaHQgc3VidHJlZSAqLyAKICAgICAgICAgICAgICAgIGNsb3Nlc3RfZWxlbWVudChyb290LT5yaWdodCwgdmFsdWUsIG1pbik7Cn0KCgpOb2RlICogY3JlYXRlX25vZGUoaW50IHZhbHVlKXsKICAgICAgICBOb2RlICogdGVtcCA9ICAoTm9kZSAqKW1hbGxvYyhzaXplb2YoTm9kZSkpOwogICAgICAgIHRlbXAtPnZhbHVlID0gdmFsdWU7CiAgICAgICAgdGVtcC0+cmlnaHQ9IE5VTEw7CiAgICAgICAgdGVtcC0+bGVmdCA9IE5VTEw7CiAgICAgICAgcmV0dXJuIHRlbXA7Cn0KTm9kZSAqIGFkZE5vZGUoTm9kZSAqbm9kZSwgaW50IHZhbHVlKXsKICAgICAgICBpZihub2RlID09IE5VTEwpewogICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZV9ub2RlKHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgIGlmIChub2RlLT52YWx1ZSA+IHZhbHVlKXsKICAgICAgICAgICAgICAgIG5vZGUtPmxlZnQgPSBhZGROb2RlKG5vZGUtPmxlZnQsIHZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICBub2RlLT5yaWdodCA9IGFkZE5vZGUobm9kZS0+cmlnaHQsIHZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5vZGU7Cn0KIAovKiBEcml2ZXIgcHJvZ3JhbSBmb3IgdGhlIGZ1bmN0aW9uIHdyaXR0ZW4gYWJvdmUgKi8KaW50IG1haW4oKXsKICAgICAgICBOb2RlICpyb290ID0gTlVMTDsKICAgICAgICBOb2RlICogbGFzdCA9IE5VTEw7CiAgICAgICAgTm9kZSAqcHRyVG9IZWFkID0gTlVMTDsKICAgICAgICBpbnQgbWluID0gMTAwOwogICAgICAgIC8vQ3JlYXRpbmcgYSBiaW5hcnkgdHJlZQogICAgICAgIHJvb3QgPSBhZGROb2RlKHJvb3QsMzApOwogICAgICAgIHJvb3QgPSBhZGROb2RlKHJvb3QsMjApOwogICAgICAgIHJvb3QgPSBhZGROb2RlKHJvb3QsMjEpOwogICAgICAgIHJvb3QgPSBhZGROb2RlKHJvb3QsNDApOwogICAgICAgIHJvb3QgPSBhZGROb2RlKHJvb3QsMzEpOwogICAgICAgICBjbG9zZXN0X2VsZW1lbnQocm9vdCwgMjksICZtaW4pOwogICAgICAgIHByaW50ZigiQ2xvc2VzdCBlbGVtZW50IDogJWQiLCBtaW4gKyAyOSApOwogICAgICAgIHJldHVybiAwOwp9IAo=