描述
要求:
1.采用二叉链表的方式进行存储
2.构造一个二叉树类
实现以下算法:
1.创建二叉树
2.对二叉树进行前序、中序、后序遍历
输入
扩展的前序序列.在一棵树处理结束后,根据响应判断是否处理下一棵树
输出
前序、中序、后序
样例输入
ab##c## Y abc#### N
样例输出
abc bac bca abc cba cba
分析:无
代码:
#include<bits/stdc++.h>
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;
void Creat(BiNode<T> *& root);
void Release(BiNode<T> *root);
void PreOrder(BiNode<T> *root);
void InOrder(BiNode<T> *root);
void PostOrder(BiNode<T> *root);
};
template<class T>
BiTree<T>::BiTree()
{
Creat(root);
}
template<class T> //建立二叉树
void BiTree<T>::Creat(BiNode<T>*&root)
{
T ch;
cin >> ch;
if (ch == '#') root = NULL;
else {
root = new BiNode<T>;
root->data = ch;
Creat(root->lchild);
Creat(root->rchild);
}
}
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 ;
}
}
template<class T>
void BiTree<T>::Release(BiNode<T>* root)
{
if (root != NULL) {
Release(root->lchild);
Release(root->rchild);
delete root;
}
}
int main()
{
char s;
while (true)
{
BiTree<char> a;
cin>>s;
a.PreOrder();
cout << endl;
a.InOrder();
cout << endl;
a.PostOrder();
cout << endl;
if (s == 'N') break;
}
return 0;
}