fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4.  
  5. struct node{
  6. int value;
  7. struct node *left;
  8. struct node *right;
  9. };
  10. typedef struct node Node;
  11.  
  12. void closest_element(Node *root, int value, int *min){
  13.  
  14. if(!root)
  15. return ;
  16.  
  17. int diff = abs(root->value - value);
  18.  
  19. if(abs(*min) > abs(diff)){
  20. *min = diff;
  21. }
  22. /* Case 2 : Look for in left subtree */
  23. if(root->value > value)
  24. closest_element(root->left, value, min);
  25. else
  26. /* Case 3 : Look for in right subtree */
  27. closest_element(root->right, value, min);
  28. }
  29.  
  30.  
  31. Node * create_node(int value){
  32. Node * temp = (Node *)malloc(sizeof(Node));
  33. temp->value = value;
  34. temp->right= NULL;
  35. temp->left = NULL;
  36. return temp;
  37. }
  38. Node * addNode(Node *node, int value){
  39. if(node == NULL){
  40. return create_node(value);
  41. }
  42. else{
  43. if (node->value > value){
  44. node->left = addNode(node->left, value);
  45. }
  46. else{
  47. node->right = addNode(node->right, value);
  48. }
  49. }
  50. return node;
  51. }
  52.  
  53. /* Driver program for the function written above */
  54. int main(){
  55. Node *root = NULL;
  56. Node * last = NULL;
  57. Node *ptrToHead = NULL;
  58. int min = 100;
  59. //Creating a binary tree
  60. root = addNode(root,30);
  61. root = addNode(root,20);
  62. root = addNode(root,21);
  63. root = addNode(root,40);
  64. root = addNode(root,31);
  65. closest_element(root, 29, &min);
  66. printf("Closest element : %d", min + 29 );
  67. return 0;
  68. }
  69.  
Success #stdin #stdout 0s 2140KB
stdin
Standard input is empty
stdout
Closest element : 30