描述
1.采用二叉链表的方式进行存储
2.构造一个二叉树类
实现以下算法:
1.创建二叉树
2.对二叉树进行前序、中序、后序遍历
输入
扩展的前序序列.在一棵树处理结束后,根据响应判断是否处理下一棵树
输出
前序、中序、后序
样例输入
ab##c##
Y
abc####
N
样例输出
abc
bac
bca
abc
cba
cba
#include<iostream>
using namespace std;
template<typename Datatype>
struct Bnode{ // 结点定义
Datatype data; // 数据域
Bnode<Datatype> *lchild,*rchild; // 指针域
};
template<typename Datatype>
class Tshu{
private:
Bnode<Datatype> *root; // 树根节点
public:
Tshu(); // 构造函数
void adds(Bnode<Datatype> * &root); //添加新结点
void qian(Bnode<Datatype> * root); // 前序遍历
void zhong(Bnode<Datatype> * root); // 中序遍历
void hou(Bnode<Datatype> * root); // 后序遍历
void shu1(){qian(root);}
void shu2(){zhong(root);}
void shu3(){hou(root);}
void shu4(){cout<<" "<<root->data;}
};
template<class Datatype>
Tshu<Datatype>::Tshu(){
adds(root);
}
template <class Datatype>
void Tshu<Datatype>::adds(Bnode<Datatype> * &root){
Datatype ch;
cin>>ch;
if (ch=='#')
root = NULL;
else{
root = new Bnode<Datatype>;
root->data=ch;
adds(root->lchild);
adds(root->rchild);
}
}
template<typename Datatype>
void Tshu<Datatype>::qian(Bnode<Datatype> * root){
if (root == NULL)
return; // 遇到空指针截至 ;
else {
cout<< root->data ;
qian(root->lchild);
qian(root->rchild);
}
}
template<typename Datatype>
void Tshu<Datatype>::zhong(Bnode<Datatype> * root){
if (root == NULL)
return; // 遇到空指针截至 ;
else {
zhong(root->lchild);
cout<< root->data ;
zhong(root->rchild);
}
}
template<typename Datatype>
void Tshu<Datatype>::hou(Bnode<Datatype> * root){
if (root == NULL)
return; // 遇到空指针截至 ;
else {
hou(root->lchild);
hou(root->rchild);
cout<< root->data ;
}
}
int main()
{
char T = 'Y';
while(T == 'Y')
{
Tshu<char> a;
a.shu1();
cout<<endl;
a.shu2();
cout<<endl;
a.shu3();
cout<<endl;
cin>>T;
}
}