There is some confusion about accessing of tree node information. 
 Incorrect accessing leads to hard-to-trace memory errors 
 (typically, segmentation violation).
 Below is a hint:

 Assume node is declared as a pointer to a NodeType

  NodeType *node;

 De-referencing the pointer (if not NULL)

  *node

 gives an object of type NodeType. As NodeType is a vector (of size 26),
 its elements can be accessed as follows:

  (*node)[index]        0<=index<=25

 The elements of NodeType are structs. To access struct fields,
 "." notation is used:

  (*node)[index].word_endings
  (*node)[index].is_word_end

 The following is WRONG (though not detected by C compilers
 due to the "equivalence" between arrays and pointers to elements --
 char string[] is type equivalent to char *string):

  node[index]->word_endings
  node[index]->is_word_end

 Remember, p->f is a shorthand notation for (*p).f
 De-reference (follow) pointer p. p MUST be a pointer to a struct.
 In this case, *p is a struct and its field f can be accessed.
 This means

  node[index]->word_endings

 is exactly the same as

  (*(node[index])).word_endings

 which assumes there is an array of NodeType objects !
 It is NOT the same as

  (*node)[index].word_endings