Convert an array to a binary tree
Main points to improve:


Memory leaks: C++ is not garbage collected. Every new must be deleted at some point. This is one of the reasons why C++ has destructors, so that we can perform this and other kinds of cleanup. In modern C++, smart pointers and standard containers are preferable, over manual memory management, since forgetting to delete a pointer is a very easy to make mistake, thus manual memory management being a major source of bugs and memory leaks. 
Unusual data initialization style in constructors:


TNode&lt;E&gt;(){
    this-&gt;value = NULL;
    this-&gt;leftChild = NULL;
    this-&gt;rightChild = NULL;
}



The following is the correct way to initialize members. You should use the constructor initialization list. Also, prefixing the variables with a this-&gt; in something we rarely do in C++:

TNode()
    : value(NULL)
    , leftChild(NULL)
    , rightChild(NULL)
{ }



Other tidbits:


Inside the body of a template class, such as in TNode, you should omit the template parameter in the name. Writing TNode&lt;E&gt; everywhere is too verbose and unnecessary.
Template parameter name for types is by convention called T instead of E.
NULL is deprecated since C++11 in favor of the better nullptr.
Integer return codes are quite error prone. Returning a bool true or false, when the function has only two possible outcomes, is a lot nicer. 
You didn't follow your camelCase notation in the create_tree() method.