#include "stdio.h"
#include "stdlib.h"
 
typedef struct BST_NODE{
  int value;
  struct BST_NODE *left;
  struct BST_NODE *right;
}BST_NODE;
 
 
void insert_node(BST_NODE *root, BST_NODE *toadd){
  int target = toadd->value;
  BST_NODE *currentnode = root;
  int added = 0;
  while (added == 0){
    if (currentnode->value > target){
      if (currentnode->left == NULL){
        currentnode->left = toadd;
        added = 1;
      }
      else{
        currentnode = currentnode->left;
      }
    }
    else{
      if (currentnode->right == NULL){
        currentnode->right = toadd;
        added = 1;
      }
      else{
        currentnode = currentnode->right;
      }
    }
  }
}
 
BST_NODE *create_node(int value){
  BST_NODE *mynode = (BST_NODE*)malloc(sizeof(BST_NODE));
  mynode->value = value;
  mynode->left = NULL;
  mynode->right = NULL;
  return mynode;
}
 
void print_nodes(BST_NODE* startnode){
  printf("%d\n", startnode->value);
  if (startnode->left != NULL){
    printf("left of %d : ", startnode->value);
    print_nodes(startnode->left);
  }
  if (startnode->right != NULL){
    printf("right of %d : ", startnode->value);
    print_nodes(startnode->right);
  }
}
 
int main(){
  BST_NODE *root = create_node(10);
  BST_NODE *first = create_node(2);
  BST_NODE *second = create_node(3);
  BST_NODE *third = create_node(5);
  BST_NODE *fourth = create_node(8);
  insert_node(root, first);
  insert_node(root, second);
  insert_node(root, third);
  insert_node(root, fourth);
  print_nodes(root);
  return 0;
}