tree.c 1.52 KB
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 30

typedef struct node* Node;

typedef struct node {
  char letter;
  Node next[26];
  bool endWord;
}node;

void mk_empty_tree(Node* Tree)
{
  *Tree = NULL;
}

bool is_empty_tree(Node* Tree)
{
  return(*Tree==NULL);
}

void init_tree(Node* Tree)
{
  if(is_empty_tree(Tree))
    {
      *Tree = malloc(sizeof(Node));
      (*Tree)->letter = '?';
      (* Tree)->endWord = false;
      for(int i=0; i<26; i++)
	(*Tree)->next[i] = NULL;
    }
}

void add_in_tree(Node *Tree, char word[])
{
  char letter = word[0];
  int j=0;
  while(letter != '/0')
    {
      char letter = word[j];
      if((*Tree)->next[letter-'a']!=NULL)
	*Tree = (*Tree)->next[letter-'a'];
      else
	{
	  Node new = NULL;
	  new = malloc(sizeof(Node));
	  new->letter = letter;
	  for(int i=0; i<26; i++)
	    {
	      new->next[i]=NULL;
	    }
	  (*Tree)->next[letter-'a'] = new;
	}
      j++;
    }
  (*Tree)->endWord = true;
}

void read_lib(FILE* fp, Node* Tree)
{
  char word[MAX];
  while(1)
    {
      if(fscanf(fp, "%s", &word)!=1)
	break;
      add_in_tree(Tree, word);
    }
}

void print_tree(Node Tree, int index)
{
  Node printedTree = Tree;
  if(printedTree!=NULL)
    printf("%c", printedTree->letter);
  if(printedTree->next[index]==NULL)
    print_tree(printedTree, index+1);
  else
    print_tree(printedTree->next[index], 0);
}

int main(int argc, char *argv[])
{
  Node Tree = NULL;
  FILE* fp;
  fp = fopen(argv[argc-1], "r");
  read_lib(fp, &Tree);
  print_tree(Tree, 0);
  return 0;
}