二叉树的遍历

#include<iostream>
#include<fstream>
#include<queue>
#include<stack>
using namespace std;
/*******************树的节点定义为BiTNode,二叉树定义为BiTree**********/
typedef int ElemType;
typedef struct BiTNode{
    ElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
/*******************函数声明*****************************************/
void CreateBiTree(BiTree &T);
void PreOrderTraverse(BiTree T);
void InOrderTraverse(BiTree T);
void PostOrderTraverse(BiTree T);
void LevelOrderTraverse(BiTree T);
/*******************文件操纵流***************************************/
ifstream infile("C:\\Users\\Administrator\\Desktop\\数据结构\\树\\数据2.txt");

int main()
{
    BiTree T;
    CreateBiTree(T);
//    PreOrderTraverse(T);
//    InOrderTraverse(T);
//    LevelOrderTraverse(T);
    return 0;
}

/********************构造二叉树************************************/
void CreateBiTree(BiTree &T)
{
    ElemType x;
    cin>>x;
    if(x==0)
        T=NULL;
    else
    {
        T=new BiTNode;
        T->data=x;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
}

#if 0
/******************递归遍历二叉树**************************/
void PreOrderTraverse(BiTree T)
{
    if(T)
    {
        cout<<T->data;
        PreOrderTraverse(T->lchild);
        PreOrderTraverse(T->rchild);
    }
}

void InOrderTraverse(BiTree T)
{
    if(T)
    {
        PreOrderTraverse(T->lchild);
        cout<<T->data;
        PreOrderTraverse(T->rchild);
    }
}

void PostOrderTraverse(BiTree T)
{
    if(T)
    {
        PreOrderTraverse(T->lchild);
        PreOrderTraverse(T->rchild);
        cout<<T->data;
    }
}
#else
/********************非递归遍历二叉树**************************/
void PreOrderTraverse(BiTree T)
{
    stack<BiTree> s;
    BiTree p=T;
    while(p||!s.empty())
    {
        if(p)
        {
            cout<<p->data;
            s.push(p);
            p=p->lchild;
        }
        else
        {
            p=s.top();
            s.pop();
            p=p->rchild;
        }
    }
}

void InOrderTraverse(BiTree T)
{
    stack<BiTree> s;
    BiTree p=T;
    while(p||!s.empty())
    {
        if(p)
        {
            s.push(p);
            p=p->lchild;
        }
        else
        {
            p=s.top();
            cout<<p->data;
            s.pop();
            p=p->rchild;
        }
    }   
}
void LevelOrderTraverse(BiTree T)
{
    queue<BiTree> q;
    BiTree p=NULL;
    q.push(T);
    while(!q.empty())
    {
        p=q.front();
        q.pop();
        cout<<p->data;
        if(p->lchild)
            q.push(p->lchild);
        if(p->rchild)
            q.push(p->rchild);
    }
}

#endif

你可能感兴趣的:(二叉树)