Advertisement
Guest User

btree

a guest
Jul 6th, 2015
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.64 KB | None | 0 0
  1. /* Compile com -std=c99, rode com ./a.out tamanho_da_arvore */
  2. #include <stdlib.h>
  3. #include <limits.h>
  4. #include <stdio.h>
  5.  
  6. /* Retorna o indice do nodo na arvore, ou UINT_MAX se nao encontrado -- O(n) */
  7. size_t
  8. index(int *tree, size_t nmemb, int node)
  9. {
  10.   size_t i = 0;
  11.   while (i < nmemb && tree[i] != node)
  12.     ++i;
  13.   return i < nmemb ? i : -1;
  14. }
  15.  
  16. int
  17. parent(int *tree, size_t nmemb, int node)
  18. {
  19.   size_t i = index(tree, nmemb, node);
  20.   if (i >= nmemb || !i)
  21.     return INT_MAX;
  22.   return tree[(i - 1) / 2];
  23. }
  24.  
  25. int
  26. left(int *tree, size_t nmemb, int node)
  27. {
  28.   size_t i = index(tree, nmemb, node);
  29.   size_t ans = 2*i + 1;
  30.   if (i >= nmemb || ans >= nmemb)
  31.     return INT_MAX;
  32.   return tree[ans];
  33. }
  34.  
  35. int
  36. right(int *tree, size_t nmemb, int node)
  37. {
  38.   size_t i = index(tree, nmemb, node);
  39.   size_t ans = 2*i + 2;
  40.   if (i >= nmemb || ans >= nmemb)
  41.     return INT_MAX;
  42.   return tree[ans];
  43. }
  44.  
  45. int
  46. main(int argc, char **argv)
  47. {
  48.   if (argc < 2) {
  49.     fprintf(stderr, "Forneca o tamanho da arvore.\n");
  50.     return EXIT_FAILURE;
  51.   }
  52.   size_t nmemb = (size_t)strtol(argv[1], NULL, 10);
  53.   if (nmemb < 2) {
  54.     fprintf(stderr, "Tamanho de pelo menos dois.\n");
  55.     return EXIT_FAILURE;
  56.   }
  57.   int *tree = malloc(nmemb * sizeof(int));
  58.   for (size_t i = 0; i < nmemb; ++i)
  59.     tree[i] = i + 1;
  60.   int e = tree[0];
  61.   printf("Pai de %d: %d Esquerda: %d Direita: %d\n", e, parent(tree, nmemb, e),
  62.       left(tree, nmemb, e), right(tree, nmemb, e));
  63.   e = left(tree, nmemb, e);
  64.   printf("Pai de %d: %d Esquerda: %d Direita: %d\n", e, parent(tree, nmemb, e),
  65.       left(tree, nmemb, e), right(tree, nmemb, e));
  66.   exit(EXIT_SUCCESS);
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement