Simplifying a class template
A few main points you should attempt to improve in this code:


Start using nullptr if you can (C++11). It is much better than the old NULL macro.
Never "use namespace" in a header file (Not sure if this is a header file? Doesn't seem like...). That would leak the imported declarations to every other place that included the header. Also be conservative about using namespace in a cpp file. Prefer to explicitly declare the things your are using (e.g.: using std::cout;) or don't do any of that and prefix everything with std::. It is not much more typing anyways. Further discussion here.
Properly initialize data in constructors by calling the constructors of the sub-objects:

Node(T dataNew)
    : data(dataNew)   // Better would be 'data(std::move(dataNew))' if C++11
    , lChildptr(NULL) // Better 'nullptr' if C++11
    , rChildptr(NULL) // Same here
{ }

#include &lt;stdlib.h&gt; is the C header file. For C++, use &lt;cstdlib&gt;.
Why this:


   Node *newData;
   newData= new Node(item);



Instead of just: Node * newData = new Node(item);?
PrintTree() would be more flexible if it took the output stream as a parameter. Also, consider providing the stream output operator &lt;&lt; instead. It is the most idiomatic way of printing an object in C++.
Mind Const Correctness. PrintTree() is not mutating any member variables, so it should be const.
Your new allocated instances are never being freed and are leaking in your test code. If you are going to use dynamic memory, make sure to first attempt a smart pointer or a standard container. This will make your life a lot easier and your code a lot more bug-free. Side note: These local variables you've declared in main() have no reason for being pointers. They could very well be declared by value in the program stack.
A little inconsistency with naming: insertnode() is not following your PascalCase notation. As a side note, camelCase is more popular for method names (except for Windows-centric projects perhaps).