下面的程序,哪个高手看看啊,帮我改一下错(二叉树的非递归问题):
//BiTree.h
#ifndef BITREE_H
#define BITREE_H
template<class T>
struct BiNode
{
T data;
BiNode<T> *lchild,*rchild;
};
template<class T>
class BiTree
{
public:
BiTree(); //有参构造函数,初始化一棵二叉树,其前序序列由键盘输入
~BiTree(); //析构函数,释放二叉树链表中各结点的存储空间
BiNode<T> *Getroot(); //获得指向根结点的指针
void PreOrder(BiNode<T> *root); //前序遍历二叉树
void InOrder(BiNode<T> *root); //中序遍历二叉树
void PostOrder(BiNode<T> *root); //后序遍历二叉树
private:
BiNode<T> *root; //指向根结点的指针
BiNode<T> *Creat(); //有参构造函数调用
void Release(BiNode<T> *root); //析构函数调用
};
#endif
//BiTree.cpp
#include<iostream>
#include<string>
#include"BiTree.h"
using namespace std;
template<class T>
BiTree<T>::BiTree()
{
root=Creat();
}
template<class T>
BiTree<T>::~BiTree(void)
{
Release(root);
}
template<class T>
BiNode<T> *BiTree<T>::Getroot()
{
return root;
}
template<class T>
void BiTree<T>::PreOrder(BiNode<T> *root)
{
int top=-1; //采用顺序栈,并假定不会发生上溢
T s[];
while(root!=NULL||top!=-1)
{
while(root!=NULL)
{
cout<<root->data;
s[++top]=root;
root=root->lchild;
}
if(top!=-1){
root=s[top--];
root=root->rchild;
}
}
}
template<class T>
void BiTree<T>::InOrder(BiNode<T> *root)
{
int top=-1; //采用顺序栈,并假定不会发生上溢
T s[];
while(root!=NULL||top!=-1)
{
while(root!=NULL)
{
s[++top]=root;
root=root->lchild;
}
if(top!=-1){
root=s[top--];
cout<<root->data;
root=root->rchild;
}
}
}
template<class T>
void BiTree<T>::PostOrder(BiNode<T> * root)
{
int top=-1;
T s[];
while(root!=NULL||top!=-1)
{
while(root!=NULL)
{
top++;
s[top].ptr=root;
s[top].flag=1;
root=root->lchild;
}
while(top!=-1&&s[top].flag==2)
{
root=s[top--].ptr;
cout<<root->data;
}
if(top!=-1){
s[top].flag=2;
root=s[top].ptr->rchild;
}
}
}
template <class T>
BiNode<T>* BiTree<T>::Creat( )
{
BiNode<T>* root;
T ch;
cout<<"请输入创建一棵二叉树的结点数据"<<endl;
cin>>ch;
if (ch=="#") root = NULL;
else{
root = new BiNode<T>; //生成一个结点
root->data=ch;
root->lchild = Creat( ); //递归建立左子树
root->rchild = Creat( ); //递归建立右子树
}
return root;
}
template<class T>
void BiTree<T>::Release(BiNode<T>* root)
{
if (root != NULL){
Release(root->lchild); //释放左子树
Release(root->rchild); //释放右子树
delete root;
}
}
//BiTreeMain.cpp
#include<iostream>
#include<string>
#include"BiTree.cpp"
using namespace std;
int main()
{
BiTree<string> bt; //创建一棵树
BiNode<string>* root=bt.Getroot(); //获取指向根结点的指针
cout<<"----前序遍历-----"<<endl;
bt.PreOrder(root);
cout<<endl;
cout<<"-----中序遍历-----"<<endl;
bt.InOrder(root);
cout<<endl;
cout<<"----后序遍历-----"<<endl;
bt.PostOrder(root);
cout<<endl;
return 0;
}