#include <stdbool.h>
    
    #include "dictionary.h"
    #include<string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include<ctype.h>
    int count=0;
    node *root=NULL;
    /**
     * Returns true if word is in dictionary else false.
     */
    bool check(const char *word)
    {
        // TODO
        for(int i=0;word[i]!='\0';i++)
            tolower(word[i]);
        node *tmp;
        tmp=root;
        for(int i=0;word[i]!='\0';i++)
        {
        int a;
        if(isalpha(word[i]))
                a=word[i]-97;
        else
            a=26;
        if(tmp->children[a]==NULL)
            return false;
        else if(tmp->children[a]!=NULL)
            {
                tmp=tmp->children[a];
            }
        if(i==(strlen(word)-1))
        {
            if(tmp->is_word==true)
                return true;
            else
                return false;
            
        }
        }
    return false;
    
    }
    
    /**
     * Loads dictionary into memory. Returns true if successful else false.
     */
    bool load(const char *dictionary)
    {   
        node *newnode;
        FILE* file = fopen(dictionary, "r");
        if (file == NULL)
        {
            printf("Could not open dictionary.\n");
            return false;
        }
        while (!feof(file))
        {
            char word[LENGTH+1];
            fscanf(file,"%s\n",word);
            count++;
            node *tmp;
            tmp=root;
            for(int i=0;word[i]!='\0';i++)
            {
                int a;
            if(isalpha(word[i]))
                a=(int)word[i]-97;
            else
                a=26;

**Line 76**
       

            if(tmp->children[a]==NULL) //line76
            {
                newnode=malloc(sizeof(newnode));
                tmp->children[a]=newnode;
                tmp=newnode;
            }
            else if(tmp->children[a]!=NULL)
            {
                tmp=newnode;
            }
            if(i==(strlen(word)-1))
                tmp->is_word=true;
            }
            
        }
        // TODO
        return true;
    }
    
    /**
     * Returns number of words in dictionary if loaded else 0 if not yet loaded.
     */
    unsigned int size(void)
    {
        // TODO
        if(count!=0)
            return count;
        else
            return 0;
    }
    
    /**
     * Unloads dictionary from memory. Returns true if successful else false.
     */
    bool unload(void)
    {   if(root==NULL)
            return false;
        for(int i=0;i<27;i++)
            if(root->children[i]!=NULL)
                delNode(root->children[i]);
        return true;
        
    }
    void delNode(node *tempNode)
    {
        for (int i=0;i<27;i++)
        {
            if (tempNode->children[i] != NULL)
                delNode(tempNode->children[i]);
        }
        free(tempNode);
    
    }