首页 > 其他 > 详细

二叉树的遍历

时间:2015-05-11 19:41:50      阅读:126      评论:0      收藏:0      [点我收藏+]

#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

二叉树的遍历

原文:http://www.cnblogs.com/hutao886/p/4495300.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!