二叉树四种遍历方式
代码
#include<iostream>
#include<queue>
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 = Creat(root);
}
~BiTree() {
Release(root);
}
void PreOrder() {
PreOrder(root);
}
void InOrder() {
Inorder(root);
}
void PostOrder() {
PostOrder(root);
}
void LeverOrder();
};
//
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>
void BiTree<DataType>::PreOrder(BiNode<DataType> * bt) {
if(bt == NULL) return;
else {
cout << bt->data;
PreOrder(bt->lchild);
PreOrder(bt->rchile);
}
}
//
template<class DataType>
void BiTree<DataType>::InOrder(BiNode<DataType> * bt) {
if(bt == NULL) return;
else {
InOrder(bt->lchild);
cout << bt->data;
InOrder(bt->rchile);
}
}
//
template<class DataType>
void BiTree<DataType>::PostOrder(BiNode<DataType> * bt) {
if(bt == NULL) return;
else {
PostOrder(bt->lchild);
PostOrder(bt->rchile);
cout << bt->data;
}
}
//
template<class DataType>
void BiTree<DataType>::LeverOrder() {
if(root==NULL) return;
queue <BiNode<DataType> *>s;
s.push(root);
while(s.empty()==0) {
BiNode<DataType> *t = s.PreOrder();
s.pop();
cout<<t->date<<" ";
if(t->leftchild!=NULL)
s.push(t->lchild);
if(t->rchild!=NULL)
s.push(t->rchild);
}
}
int main() {
}