#include void print_bits(char p, int l) { int i; for (i = 0; i < l; i++) if (p & (1 << i)) putchar('1'); else putchar('0'); } char * make_tree(char *s, int *len, int l, int b, int pos) { char c; if (*len == 0) return (s); c = *s; s++; (*len)--; if (c == '\1') { s = make_tree(s, len, l + 1, 0, pos); return (make_tree(s, len, l + 1, 1, pos | (1 << (l - 1)))); } else { print_bits(pos | (b << l), l - 1); putchar(' '); printf(" %d\n", *s); s++; (*len)--; return (s); } } int main(void) { char str[] = { 1, 1, 1, 1, 0, 3, 1, 0, 4, 0, 5, 0, 6, 1, 0, 7, 0, 8 }; int len; len = sizeof(str); make_tree(str, &len, 0, 0, 0); return (0); }