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

struct node;
struct node {
	int		value;
	struct node	*left;
	struct node	*right;
};

struct node *new_node(int value)
{
	struct node *new;

	new = malloc(sizeof(struct node));
	if (new == NULL)
		exit(-1);

	new->value = value;
	new->left  = NULL;
	new->right = NULL;

	return new;
}

void insert_node(struct node **tree, int value)
{
	if (*tree == NULL) {
		*tree = new_node(value);
		return;
	}

	if (value < (*tree)->value) {
		insert_node(&(*tree)->left, value);
	} else if (value > (*tree)->value) {
		insert_node(&(*tree)->right, value);
	} else {
		exit(-1);
	}
}

void print_tree(struct node *tree)
{
	if (tree == NULL)
		return;

	print_tree(tree->left);
	printf("value = %d\n", tree->value);
	print_tree(tree->right);
}

int main(int argc, char *argv[])
{
	int		values[5] = { 5, 8, 3, 7, 6 };
	struct node	*root = NULL;
	int		i;

	for (i = 0; i < 5; i++) {
		printf("Adding %d\n", values[i]);
		insert_node(&root, values[i]);
	}

	print_tree(root);

	exit(0);
}
