二叉树的实现
描述
要求:
1.采用二叉链表的方式进行存储
2.构造一个二叉树类
实现以下算法:
1.创建二叉树
2.对二叉树进行前序、中序、后序遍历
输入
扩展的前序序列.在一棵树处理结束后,根据响应判断是否处理下一棵树
输出
前序、中序、后序
样例输入
ab##c##
Y
abc####
N
样例输出
abc
bac
bca
abc
cba
cba
源码:
#include <iostream>
using namespace std;
template<class T>
struct BiNode
{
T data;
BiNode<T> *lchild,*rchild;
};
template<class T>
class Bitree
{
public:
Bitree();
void Preorder(){Preorder(root);}
void Inorder(){Inorder(root);}
void Postorder(){Postorder(root);}
private:
BiNode<T> *root;
BiNode<T> *Creat();
void Preorder(BiNode<T> *root);
void Inorder(BiNode<T> *root);
void Postorder(BiNode<T> *root);
};
template<class T>
Bitree<T>::Bitree()
{
root=Creat();
}
template<class T>
BiNode<T> *Bitree<T>::Creat()
{
BiNode<T> *root;
char ch;
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>::Preorder(BiNode<T> *root)
{
if(root==NULL) return;
else
{
cout<<root->data;
Preorder(root->lchild);
Preorder(root->rchild);
}
}
template<class T>
void Bitree<T>::Inorder(BiNode<T> *root)
{
if(root==NULL) return;
else
{
Inorder(root->lchild);
cout<<root->data;
Inorder(root->rchild);
}
}
template<class T>
void Bitree<T>::Postorder(BiNode<T> *root)
{
if(root==NULL) return;
else
{
Postorder(root->lchild);
Postorder(root->rchild);
cout<<root->data;
}
}
int main()
{
char j;
while(1)
{
Bitree<char>t;
cin>>j;
t.Preorder();
cout<<endl;
t.Inorder();
cout<<endl;
t.Postorder();
cout<<endl;
if(j=='N') break;
}
return 0;
}