treeh.c 1.43 KB
#include "treeh.h"

//initializers & destroyer
tree make_empty_tree(){
  return NULL;
}
node* make_empty_node(){
  node*n=malloc(sizeof(node));
  n->letter='\0';
  n->isEnd=false;
  for(int i=0;i<NBCHAR;i++)
    n->next[i]=make_empty_tree();
}
node* make_node(char l,bool end){
  node*n=malloc(sizeof(node));
  n->letter=l;
  n->isEnd=end;
  for(int i=0;i<NBCHAR;i++)
    n->next[i]=make_empty_tree();
}
void delete_tree(tree t){
  if(is_empty(t))return;
  for(int i=0;i<NBCHAR;i++)
    delete_tree(t->next[i]);
  free(t);
}



//Casual functions
bool is_empty(tree t){
  return t==NULL;
}
bool is_followed(tree t){
  int i;
  for(i=0;i<NBCHAR;i++){
    if(t->next[i]!=NULL)
      return true;
  }
  return false;
}
bool is_end(tree t){
  return t->isEnd;
}
int hash(char c){
  //needs to check c wether isalpha or '\''
  if(c='\'')
    return 0;
  return c%64;
}



//
bool addto_tree(tree t,string s,bool isIn){
  //recursive, when called : set isIn to true
  //return wether s is already in t or not
  if(s[0]=='\0'){
    t->isEnd=true;
    return isIn;
  }
  if(t->next[hash(s[0])]==NULL)
    t->next[hash(s[0])]=make_node(s[0],false); 
}
void addto_tree2(tree t,string s){
  //faster than addto_tree, used when it is knowned the word is not yet in dictionnary
  if(s[0]=='\0'){
    t->isEnd=true;
    return;
  }
  t->next[hash(s[0])]=make_node(s[0],false);
  addto_tree2(t->next[hash(s[0])],
}
void loadfrom_file(tree,FILE*){}
void loadfrom_keyboard(tree){}