二叉树---遍历递归算法

2018-11-22  本文已影响0人  羊老头
#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;
}
上一篇 下一篇

猜你喜欢

热点阅读