Bonjour,
J essaye depuis ce matin de creer a partir d une liste chaine un arbre binaire equilibre. J ai reussi a faire quelque fonction dont une qui, en fonction du noeud envoye en parametre place l element voulu a gauche si y a de la place a droite sinon.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
t_btree         *add_node_in_tree(t_btree *father, char *data)
{
  t_btree       *node;
 
  node = new_btree_node(data);
  if (father)
    if(!(father->left))
      {
          printf("Gauche : %s \n",data); //pour voir ou je cree
        father->left = node;
      }
    else
      if (!(father->right))
        {
          printf("Droite : %s \n",data); // pour voir ou je cree
          father->right = node;
        }
      else
        {
          free(node);
        }
  return (node);
}

j ai ensuite fait ma fonction sorted_list_to_btree et pour le momen je place au maximun 7 element correctement. Je n arrive pa a voir la recurence qui me permettrai d en ajouter plus
voici ma fonction

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
t_btree         *sorted_list_to_btree(t_list *l, int size)
{
  t_btree       *tree;
  t_btree       *tmp_tree;
  t_btree       *tmp2_tree;
  int           nbran;
  int           compt;
 
  compt = 1;
  nbran = calcul_nb_brch(size); // pour connaitre le nombre de niveau
  tree = new_btree_node(l->data);
  l = l->next;
  init_tree = tree;
  while (l)
    {
      tmp_tree = tree;
      while (compt < nbran && l)
        {
          printf(" Noeud courant : %s \n", tree->item); // pour connaitre le pere
          tmp2_tree = tree;
          tree = add_node_in_tree(tree, l->data);
          l = l->next;
          compt ++;
        }
      tree = tmp2_tree;
      compt --;
      while (compt < nbran && l)
        {
          printf(" Noeud courant : %s \n", tmp2_tree->item);
          tree = add_node_in_tree(tree, l->data);
          l = l->next;
          compt ++;
        }
      compt = 1;
      tree = init_tree;
    }
  return (tree);
}

je m arrache les cheveux aide moi please