Guest User

Untitled

a guest
Jan 22nd, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.48 KB | None | 0 0
  1. #define pow2(n) (1 << (n))
  2.  
  3. /* função recebe o nó raiz da árvore */
  4.  
  5. void btree_print_node_graph(btree_node *node) {
  6.     if (node == NULL) {
  7.         return;
  8.     }
  9.     else {
  10.         char fmt[9];
  11.         btree_node **row1, **row2, **row_tmp;
  12.         size_t rows, row, col;
  13.  
  14.     /* é necessário ter uma função que retorne a altura da árvore */
  15.         rows = btree_height(node);
  16.  
  17.         row1 = malloc(sizeof(btree_node *) * pow2(rows));
  18.         row2 = malloc(sizeof(btree_node *) * pow2(rows));
  19.         row1[0] = node;
  20.         for (row = 0; row < rows; row++) {
  21.             size_t col2 = 0, cols = pow2(row);
  22.             sprintf(fmt, "%%%dc", pow2(rows - (row + 1)));
  23.             for (col = 0; col < cols; col++) {
  24.                 btree_node *n = row1[col];
  25.                 if (n != NULL) {
  26.                     /* altere aqui o nome dos campos */
  27.                     printf(fmt, *(char *) n->data);
  28.                     row2[col2++] = n->left;
  29.                     row2[col2++] = n->right;
  30.                 }
  31.                 else {
  32.                     printf(fmt, ' ');
  33.                     row2[col2++] = NULL;
  34.                     row2[col2++] = NULL;
  35.                 }
  36.                 if (!col) {
  37.                     sprintf(fmt, "%%%dc", pow2(rows - (size_t)(row)));
  38.                 }
  39.             }
  40.             printf("\n");
  41.             row_tmp = row1;
  42.             row1 = row2;
  43.             row2 = row_tmp;
  44.         }
  45.         free(row1);
  46.         free(row2);
  47.     }
  48. }
Add Comment
Please, Sign In to add comment