用栈模拟二叉树的前序创建,程序老是有有关问题,帮忙看一下吧
用栈模拟二叉树的前序创建,程序老是有问题,帮忙看一下吧
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
代码如下:
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(); } } } }
------解决方案--------------------
二叉树的图,不好意思,显示变成自动对齐了,又没有权限修改……