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

typedef struct noeud {
  int valeur;
  struct noeud* gauche;
  struct noeud* droit;
} noeud;

noeud* nouvel_arbre (int valeur) {
  noeud* n;
  n = (noeud*)malloc(sizeof(noeud));
  n->valeur = valeur;
  n->gauche = NULL;
  n->droit = NULL;
  return n;
}

void __affiche (noeud* arbre, int profondeur, int flag) {
  int i;
  if (flag) {
    for (i = 0; i < profondeur; i++) printf ("\t");
  }
  if (arbre == NULL) {
    printf ("-");
  } else {
    printf ("%d\t", arbre->valeur);
    __affiche (arbre->gauche, profondeur+1, 0); 
    __affiche (arbre->droit, profondeur+1, 1);
  }
  if (! flag) { puts (""); }
}
void affiche (noeud* arbre) {
  __affiche (arbre, 0, 0);
}

noeud* insere (int valeur, noeud* arbre) {
  return arbre;
}

noeud* recherche (int valeur, noeud* arbre) {
  return arbre;
}

noeud* supprime (int valeur, noeud* arbre) {
  return arbre;
}

int main() {
  int v, action;
  noeud* arbre = NULL;

  while (1) {
    puts ("Choisissez ce que vous voulez faire :");
    puts (" 1 - Insérer une valeur");
    puts (" 2 - Supprimer une valeur");
    puts (" 3 - Rechercher une valeur");
    puts (" 4 - Afficher l'arbre");
    puts (" 9 - Quitter le jeu");
    scanf ("%d", &action);

    if (action == 9) { break; }
 
    switch (action) {
    case 1:
      printf ("Nouvelle valeur : ");
      scanf ("%d",&v);
      arbre = insere (v, arbre);
      break;
    case 2:
      printf ("Valeur à supprimer : ");
      scanf ("%d",&v);
      arbre = supprime (v, arbre);
      break;
    case 3:
      printf ("Valeur à rechercher : ");
      scanf ("%d",&v);
      if (recherche (v, arbre) != NULL) { 
        printf ("La valeur %d a été trouvée dans l'arbre\n", v);
      } else {
        printf ("La valeur %d n'a pas été trouvée dans l'arbre\n", v);
      }
      break;
    case 4:
      affiche (arbre);
      break;
    }

    puts ("\n************\n");
  }

  return 0;
}
