#include <stdio.h>
#include <stdlib.h>

typedef struct Node* Node;
struct Node {
   int value;
   Node left;
   Node right;
};

typedef struct Tree* Tree;
struct Tree {
   Node root;
};

void Tree_add(Tree tree, int value) {
   Node n;
   Node p;
   
   n = malloc(sizeof(struct Node));
   n->value = value;
   n->left = NULL;
   n->right = NULL;
   
   if (tree->root == NULL) {
      tree->root = n;
   } else {
      p = tree->root;
      while (1) {
         if (value < p->value) {
            if (p->left == NULL) {
               p->left = n;
               break;
            } else {
               p = p->left;
            }
         } else {
            if (p->right == NULL) {
               p->right = n;
               break;
            } else {
               p = p->right;
            }
         }
      }
   }
}

void Tree_dump(Tree tree) {

}

int main(void) {
   Tree tree = malloc(sizeof(struct Tree));
   Tree_add(tree, 3);
   Tree_add(tree, 1);
   Tree_add(tree, 5);
   Tree_add(tree, 0);
   Tree_add(tree, 2);
   Tree_add(tree, 4);
   Tree_add(tree, 6);
   Tree_dump(tree);
   return EXIT_SUCCESS;
}
