Commit 03168857d03d3bf45e6625f69759189e0f5eb8ed
1 parent
541fd894
create tree op
Showing
3 changed files
with
66 additions
and
15 deletions
Show diff stats
... | ... | @@ -0,0 +1,21 @@ |
1 | +#include "tree.h" | |
2 | + | |
3 | +int main() | |
4 | +{ | |
5 | + FILE* fp = fopen("american-english","r"); | |
6 | + //FILE* fp = fopen("dico_test","r"); | |
7 | + | |
8 | + if(fp == NULL) return 1 ; //File is not readable | |
9 | + | |
10 | + struct node* tab[26]; | |
11 | + for(int i=0;i<26;i++) | |
12 | + { | |
13 | + tab[i]=NULL; | |
14 | + } | |
15 | + | |
16 | + load_tree(fp,tab);//supprimer la case | |
17 | + | |
18 | + printf("Loading done!\n"); | |
19 | + | |
20 | + return 0; | |
21 | +} | ... | ... |
... | ... | @@ -43,20 +43,23 @@ int is_leaf(struct node *tree) |
43 | 43 | return tree->fin||tree->fils[0]==NULL; |
44 | 44 | } |
45 | 45 | |
46 | -void add(struct node ***tab_ptr_tree, char val[],int taille, int fl) | |
46 | +/*void add(struct node **tab_ptr_tree, char val[],int taille, int fl) | |
47 | 47 | { |
48 | - Node** node = tab_ptr_tree[fl]; | |
48 | + Node* node = tab_ptr_tree[fl]; | |
49 | 49 | for(int i=0;i<taille;i++) |
50 | 50 | { |
51 | 51 | if(node==NULL){ |
52 | 52 | node = malloc(sizeof(struct node)); |
53 | - cons_tree(node,val[i]);continue; | |
54 | - printf("%d",(*node)->val); | |
53 | + cons_tree(&node,val[i]); | |
54 | + printf("%d",node->val); | |
55 | + tab_ptr_tree[fl] = node; | |
56 | + continue; | |
57 | + | |
55 | 58 | } |
56 | 59 | int trouve = -1; |
57 | - for(int j=0;j<(*node)->nbr_fils;j++) | |
60 | + for(int j=0;j<(node)->nbr_fils;j++) | |
58 | 61 | { |
59 | - if((*node)->fils[j]->val==val[i]) | |
62 | + if((node)->fils[j]->val==val[i]) | |
60 | 63 | { |
61 | 64 | trouve=j; |
62 | 65 | break; |
... | ... | @@ -64,19 +67,45 @@ void add(struct node ***tab_ptr_tree, char val[],int taille, int fl) |
64 | 67 | } |
65 | 68 | if(trouve == -1) |
66 | 69 | {//ajouter fils |
67 | - (*node)->nbr_fils++; | |
68 | - (*node)->fils = realloc((*node)->fils,((*node)->nbr_fils)*sizeof(struct node*)); | |
69 | - cons_tree(&((*node)->fils[((*node)->nbr_fils)-1]),val[i]); | |
70 | + (node)->nbr_fils++; | |
71 | + (node)->fils = realloc((node)->fils,((node)->nbr_fils)*sizeof(struct node*)); | |
72 | + cons_tree(&((node)->fils[((node)->nbr_fils)-1]),val[i]); | |
70 | 73 | trouve = 0; |
71 | 74 | } |
72 | - *node = (*node)->fils[trouve]; | |
75 | + node = (node)->fils[trouve]; | |
73 | 76 | if(i==taille-1) |
74 | 77 | { |
75 | - (*node)->fin=1; | |
78 | + (node)->fin=1; | |
76 | 79 | } |
77 | 80 | } |
78 | 81 | //mettre fin à 1 pour le bon |
79 | 82 | //if(i==taille-1)(*(tab_ptr_tree[fl]))->fin=1; // |
83 | + }*/ | |
84 | + | |
85 | +void add(struct node **tab_ptr_tree, char val[],int taille, int fl) | |
86 | +{ | |
87 | + if(tab_ptr_tree[fl]==NULL)cons_tree(&(tab_ptr_tree[fl]),val[0]+97); | |
88 | + Node* noeudtest = tab_ptr_tree[fl]; | |
89 | + for(int i = 1;i<taille;i++) | |
90 | + { | |
91 | + int trouve = -1; | |
92 | + for(int j=0;j<noeudtest->nbr_fils;j++) | |
93 | + { | |
94 | + if(noeudtest->fils[j]->val==val[i])trouve=j; | |
95 | + } | |
96 | + if(trouve==-1) | |
97 | + { | |
98 | + //ajouter lettre | |
99 | + noeudtest->nbr_fils++; | |
100 | + noeudtest->fils = realloc(noeudtest->fils,(noeudtest->nbr_fils)*sizeof(struct node*)); | |
101 | + cons_tree(&(noeudtest->fils[(noeudtest->nbr_fils)-1]),val[i]); | |
102 | + trouve = 0; | |
103 | + } | |
104 | + | |
105 | + noeudtest = noeudtest->fils[trouve];//on jump au noeud suivant | |
106 | + } | |
107 | + noeudtest->fin = 1; | |
108 | + | |
80 | 109 | } |
81 | 110 | |
82 | 111 | int size(char val[]) |
... | ... | @@ -90,16 +119,17 @@ int size(char val[]) |
90 | 119 | } |
91 | 120 | |
92 | 121 | |
93 | -void load_tree(FILE *fp, struct node ***tab_ptr_tree) | |
122 | +void load_tree(FILE *fp, struct node **tab_ptr_tree) | |
94 | 123 | { |
95 | 124 | //fl (first letter) |
96 | 125 | char val[50]; |
97 | 126 | |
98 | 127 | while(fscanf(fp, "%s",val)==1) |
99 | 128 | { |
129 | + int taille = size(val); | |
100 | 130 | if(val[0]<97)val[0]+=32; |
101 | 131 | val[0]-=97; |
102 | - add(tab_ptr_tree,val,size(val),(int)val[0]); | |
132 | + add(tab_ptr_tree,val,taille,(int)val[0]); | |
103 | 133 | } |
104 | 134 | |
105 | 135 | //On peut tester la bonne ou mauvaise terminaison de la lecture | ... | ... |
... | ... | @@ -14,8 +14,8 @@ void mk_empty_tree(struct node **); |
14 | 14 | |
15 | 15 | int is_leaf(struct node *); |
16 | 16 | |
17 | -void add(struct node ***, char* ,int ,int); | |
17 | +void add(struct node **, char* ,int ,int); | |
18 | 18 | |
19 | -void load_tree(FILE *, struct node ***); | |
19 | +void load_tree(FILE *, struct node **); | |
20 | 20 | |
21 | 21 | void free_tree(struct node **); | ... | ... |