用栈模拟二叉树的前序创建,程序老是有有关问题,帮忙看一下吧

用栈模拟二叉树的前序创建,程序老是有问题,帮忙看一下吧
template<class T>
void BinaryTree<T>::stackPreCreate()
{
T t;
stack<BinTreeNode<T>*> s;//BinTreeNode<T>是二叉树结点类
BinTreeNode<T> *ptr = root;
do{
do{
cout<<"请输入结点,若孩子为空则输入"<<refValue<<endl;
cin>>t;
ptr = new BinTreeNode<T>(t);
s.push(ptr);
ptr = ptr->leftChild;
}while(t != refValue);
ptr = NULL;
if(!s.isEmpty()){
s.pop(ptr);//pop后用ptr返回pop以前的栈顶元素
ptr = ptr->rightChild;
}
}while(t!=refValue || !s.isEmpty());
}
郁闷了两天了

------解决方案--------------------
是什么问题呢?代码再稍稍多给点,我本地试一下也方便点。
------解决方案--------------------
我将值用int类型代替,写了一个,你看看,子树没有的时候用0表示。
例如:
1
2 3
4 5
7
6
可以表示为
1240050760003
代码如下:
C/C++ code
void stackPreCreate(BinTreeNode* root)
{
    int t;
    std::stack<BinTreeNode*> s;//BinTreeNode<T>是二叉树结点类
    BinTreeNode *ptr = root;
    s.push(ptr);
    std::cin>>root->value;
    ptr = root;
    while (ptr || !s.empty())
    {
        while(std::cin>>t)
        {
            if(t)
            {
                ptr->leftChild = new BinTreeNode();
                ptr = ptr->leftChild;
                ptr->value = t;
                s.push(ptr);
            }
             else
            {
                ptr->leftChild = NULL;
                break;
            }
        }
        
        if(s.empty())
            ptr = NULL;
        else
        {
            ptr = s.top();
            s.pop();
        }

        while(std::cin>>t)
        {
            if(t)
            {
                ptr->rightChild = new BinTreeNode();
                ptr = ptr->rightChild;
                ptr->value = t;
                s.push(ptr);
                break;
            }
            else
            {
                ptr->rightChild = NULL;
                if(s.empty())
                    return;
                ptr = s.top();
                s.pop();
            }
        }

    }


}

------解决方案--------------------


二叉树的图,不好意思,显示变成自动对齐了,又没有权限修改……