diff options
Diffstat (limited to 'btree-str.c')
-rw-r--r-- | btree-str.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/btree-str.c b/btree-str.c new file mode 100644 index 0000000..3f080a4 --- /dev/null +++ b/btree-str.c @@ -0,0 +1,54 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +typedef struct Node { + char *v; + struct Node *l; + struct Node *r; +} Node; + +void an(Node **, Node *); +void pn(Node *); + +void an(Node **r, Node *n) { + if (!*r) { + *r = n; + return; + } + if (strcmp(n->v, (*r)->v) > 0) { + an(&((*r)->r), n); + } else { + an(&((*r)->l), n); + } + return; +} + +void pn(Node *n) { + if (!n) { + return; + } + if (n->l) { + pn(n->l); + } + fprintf(stdout, "%s\n", n->v); + if (n->r) { + pn(n->r); + } + return; +} + +int main(int argc, char **argv) { + Node *r = NULL; + + for (argv++, argc--; argc; argv++, argc--) { + Node *n = malloc(sizeof(Node)); + n->v = *argv; + n->l = n->r = NULL; + an(&r, n); + } + + pn(r); + + exit(EXIT_SUCCESS); +} |