这棵二叉树出现了什么问题?

代码如下:
#ifndef _HEAD_H
#define _HEAD_H

template< class datatype >
struct treenode
{
datatype data ;
treenode< datatype > *lchild , *rchild ;
};

template< class datatype >
class tree
{
private:
treenode< datatype > root ;
treenode< datatype >
creattree ( treenode< datatype > *root ) ;
void preorder ( treenode< datatype > *root ) ;

public:
tree () ;
void preorder () ;
};

#endif
#include
#include"HEAD.h"

template< class datatype >
treenode< datatype >* tree< datatype > :: creattree ( treenode< datatype > *root )
{
char ch ;
std::cin >> ch ;

if ( ch == '#' )
{
    root = NULL ;
}
else
{
    root = new treenode< datatype > ;
    root->data = ch ;
    root->lchild = creattree( root->lchild ) ;
    root->rchild = creattree( root->rchild ) ;
}
return root ;

}

template< class datatype >
tree< datatype > :: tree()
{
root = creattree( root ) ;
};

template< class datatype >
void tree< datatype > :: preorder()
{
preorder( root ) ;
}

template< class datatype >
void tree< datatype > :: preorder ( treenode< datatype > * root )
{
if ( root )
{
std :: cout << " " << root->data << " " ;
preorder( root -> lchild ) ;
preorder( root -> rchild ) ;
}
};

int main ()
{
printf("请输入相关数据,空节点记为\"#\"\n") ;

tree< char > tree_text ;

tree_text.preorder() ;

system("pause") ;

}

为什么运行了程序后,程序一直停留在创建的界面,即:

图片说明

麻烦大神们帮忙看下代码,指点迷津!!!

我明白了,原来是我少打了些东西...