fork(1) download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. struct node
  5. {
  6. int key;
  7. struct node *left, *right;
  8. };
  9.  
  10. struct node *newNode(long int item)
  11. {
  12. struct node *temp = (struct node *)malloc(sizeof(struct node));
  13. temp->key = item;
  14. temp->left = temp->right = NULL;
  15. return temp;
  16. }
  17.  
  18. int h;
  19.  
  20. int node_level(struct node *root, long int d, long int level)
  21. {
  22. if(root==NULL)
  23. return 0;
  24.  
  25. if(root->key == d)
  26. return level;
  27.  
  28. h = node_level(root->left, d, level+1);
  29. if(h!=0)
  30. return h;
  31.  
  32. h = node_level(root->right, d, level+1);
  33. return h;
  34. }
  35.  
  36. void inorder(struct node *root)
  37. {
  38. if (root != NULL)
  39. {
  40. inorder(root->left);
  41. printf("%d ", root->key);
  42. inorder(root->right);
  43. }
  44. }
  45.  
  46. struct node* insert(struct node* node, long int key)
  47. {
  48. if (node == NULL) return newNode(key);
  49.  
  50. if (key < node->key)
  51. node->left = insert(node->left, key);
  52. else
  53. node->right = insert(node->right, key);
  54.  
  55. return node;
  56. }
  57.  
  58. int main()
  59. {
  60. struct node *root = NULL;
  61. long int num,n,ele,j=0;
  62. scanf("%ld", &num);
  63. n=num;
  64. long int a[n+1];
  65. while(num--)
  66. {
  67. scanf("%ld", &ele);
  68. a[j++] = ele;
  69. root= insert(root,ele);
  70. }
  71. //inorder(root);
  72.  
  73. //printf("\nHeights are as follows\n");
  74.  
  75. int cnt=0;
  76.  
  77. for(int i=0;i<n;i++)
  78. {
  79. // printf(" %d is at level %d\n", i, node_level(root, i,0));
  80. a[i]=node_level(root,a[i],0)+ a[i-1];
  81. printf("%ld\n", a[i]);
  82. }
  83.  
  84. return 0;
  85. }
Success #stdin #stdout 0s 3432KB
stdin
5
3
8
10
2
5
stdout
0
1
3
4
6