首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-03-13 
用栈模拟二叉树的前序创建,程序老是有问题,帮忙看一下吧templateclass Tvoid BinaryTreeT::stackPreCr

用栈模拟二叉树的前序创建,程序老是有问题,帮忙看一下吧
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();            }        }    }}
[解决办法]


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

热点排行