You defined your TreeNode instance as a <char> type, yet you try to call setInfo() with a char*.
Why the dynamic memory? Why not just use a "normal" instance of your class instead of the pointer (*root)?
TreeNode<char*> root;
You really really need to find an indentation style you like and use it consistently. Your program, as presented, is very hard to read.
Lastly why the C-strings? Using C++ strings would make this program a lot easier. There are several other possible problems being caused by using the C-strings instead of C++ strings. And why the template class? C-strings will require many specialized functions, because you can't use the comparison, or assignment operators with C-strings so a non-template version would probably be better.