二叉链表实现
构建、销毁、前序遍历、中序遍历、后序遍历
#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;
}