#include<iostream>
#include<queue>
//遍历二叉树
//递归算法
struct Node{
int data;
Node *lchild,*rchild;
Node():lchild(NULL),rchild(NULL){}
};
class BiTree{
private:
Node* Root;
//内部函数
void PreOrder(Node* t);
void InOrder(Node* t);
void PostOrder(Node* t);
public:
void PreOrder(){ PreOrder(Root); } //先序
void InOrder(){ InOrder(Root); } //中序
void PostOrder(){ PostOrder(Root); } //后序
void levelOrder(); //层次
};
void BiTree::PreOrder(Node* t){
if( t==NULL ) return;
cout << t->data << " ";
PreOrder( t->lchild );
PreOrder( t->rchild );
}
void BiTree::InOrder(Node* t){
if( t==NULL ) return;
PreOrder( t->lchild );
cout << t->data << " ";
PreOrder( t->rchild );
}
void BiTree::PostOrder(Node* t){
if( t==NULL ) return;
PreOrder( t->lchild );
PreOrder( t->rchild );
cout << t->data << " ";
}
void BiTree::levelOrder(){
queue<Node*> q;
Node* p;
if( Root==NULL ) return;
q.push( Root );
while( q.empty()!=true ){
p = q.front();
q.pop();
cout << p->data << " ";
if( p->rchild!=NULL ) q.push(p->rchild);
if( p->lchild!=NULL ) q.push(p->lchild);
}
cout << endl;
return;
}
网友评论