struct elem { int content; struct elem *next; }; static struct elem * flat (struct tnode *t, struct elem *l) { if (t) { struct elem *n = malloc (sizeof (struct elem)); if (n == NULL) { fputs ("Out of memory\n", stderr); exit (1); } n->next = flat (t->right, l); n->content = t->content; return flat (t->right, n); } else return l; } struct elem *flatten (struct tnode *tree) { return flat (tree, NULL); }