summaryrefslogtreecommitdiff
path: root/btree-str.c
diff options
context:
space:
mode:
Diffstat (limited to 'btree-str.c')
-rw-r--r--btree-str.c54
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);
+}