#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
template<class DataType>
struct BiNode
{
DataType data;
BiNode<DataType>*lchild,*rchild;
};
template<class DataType>
class BiTree
{private:
BiNode<DataType>*root;
BiNode<DataType>*Create(BiNode<DataType>*bt);
void Release(BiNode<DataType>*bt);
void PreOrder(BiNode<DataType>*bt);
void InOrder(BiNode<DataType>*bt);
void PostOrder(BiNode<DataType>*bt);
public:
BiTree(){root=Create(root);}
~BiTree(){Release(root);}
void PreOrder(){PreOrder(root);}
void InOrder(){InOrder(root);}
void PostOrder(){PostOrder(root);}
void LevelOrder();
};
template<class DataType>
BiNode<DataType>*BiTree<DataType>::Create(BiNode<DataType>*bt)
{DataType ch;
cin>>ch;
if(ch=='#')
bt=NULL;
else
{
bt=new BiNode<DataType>;
bt->data=ch;
bt->lchild=Create(bt->lchild);
bt->rchild=Create(bt->rchild);
}
return bt;
}
/*template<class DataType>
BiNode<DataType>*BiTree<DataType>::Create(BiNode<DataType>*bt,string pres,string ins)
{
if(prs.length()==0)
{
bt=null;
return ;
}
char rootNode=pres[0];
int index=ins.frind(rootNode);
string lins=ins.substr(0,index);
string rins=ins.substr(index+1);
int llength=lins.length();
int rlength=rins.length();
string lpres=pres.substr(1,llength);
string rpres=pres.substr(1+rlength);
if(bt!=NULL)
{
bt->data=rootNode;
bt->lchild=Create(bt->lchild,lpres,lins);
bt->rchild=Create(bt->rchild,rpres,rins);
}
}*/
template<class DataType>
void BiTree<DataType>::PreOrder(BiNode<DataType>*bt)
{
if(bt==NULL)
return ;
else
{
cout<<bt->data;
PreOrder(bt->lchild);
PreOrder(bt->rchild);
}
}
template<class DataType>
void BiTree<DataType>::InOrder(BiNode<DataType>*bt)
{
if(bt==NULL)
return ;
else
{
InOrder(bt->lchild);
cout<<bt->data;
InOrder(bt->rchild);
}
}
template<class DataType>
void BiTree<DataType>::PostOrder(BiNode<DataType>*bt)
{
if(bt==NULL)
return ;
else
{
PostOrder(bt->lchild);
PostOrder(bt->rchild);
cout<<bt->data;
}
}
template<class DataType>
void BiTree<DataType>::Release(BiNode<DataType>*bt)
{
if(bt!=NULL)
{
Release(bt->lchild);
Release(bt->rchild);
delete bt;
}
}
int main()
{
BiTree<char>bit;
bit.PreOrder();
cout<<endl;
bit.InOrder();
cout<<endl;
bit.PostOrder();
}
数据结构五二叉树的建立和遍历
猜你喜欢
转载自blog.csdn.net/sdauguanweihong/article/details/89711012
今日推荐
周排行