Here is a simple approach.
You are only looking for exact matches, so I would think that you should immediately consider hash-based algorithms, not tree-based ones. First, consider a hash map that associates each letter of the alphabet with positions in the table. Now for each word you look at the first letter, and then cross the table (left, right, up, down) to see if the whole word exists.
You can improve this by creating a hash map instead for each combination of two letters (676 keys in total) for each direction (left, right, up, down). Now you start by checking the first two letters of your word, and the hash map immediately gives you places where these two letters exist. Now you can continue to look in the table in this direction to find out if this word is completed. Alternatively, you can take the next two letters of the word and see if there is a place for this pair of letters that is adjacent to the first letter and has the same direction.
You can improve it further ... by looking at the hash map for every three letter combinations for each direction. You should be able to find a good balance between storage requirements and heuristic-based performance, such as average word length.
source share