二叉树的遍历

来源:互联网 发布:navmesh 寻路算法 编辑:程序博客网 时间:2024/06/04 21:20


关于各种遍历是个什么东西?

http://jingyan.baidu.com/article/5553fa82ba04be65a3393462.html


#include <iostream>#include <sstream>#include <cstring>#include <cstdio>#include <cctype>#include <cmath>#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <vector>#include <algorithm>#define inf 0x3f3f3f3f#define PI 3.14159265358979323#define SCD(a) scanf("%d",&a)#define SCDD(a,b) scanf("%d%d",&a,&b)#define SCF(a) scanf("%lf",&a)#define PTD(a) printf("%d\n",a)#define PTS(a) printf("%s\n",a)#define MST(a) memset(a, 0, sizeof(a))using namespace std;//                      HDOJconst int L = 10001;int n, m;struct BiTNode{    char data;    BiTNode *lchild, *rchild;};BiTNode *T;void CreateBiTree(BiTNode* &T)  //按先序建树{    char ch;    ch = getchar();    if(ch=='#')        T = NULL;    else{        T = new BiTNode;        T->data = ch;        CreateBiTree(T->lchild);        CreateBiTree(T->rchild);    }}void PreOrderTraverse(BiTNode* &T)  //先序{    if(T){        cout<<T->data;        PreOrderTraverse(T->lchild);        PreOrderTraverse(T->rchild);    }}void InOrderTraverse(BiTNode* &T)   //中序{    if(T){        InOrderTraverse(T->lchild);        cout<<T->data;        InOrderTraverse(T->rchild);    }}void PosOrderTraverse(BiTNode* &T)  //后序{    if(T){        PosOrderTraverse(T->lchild);        PosOrderTraverse(T->rchild);        cout<<T->data;    }}void LevelOrderTraverse(BiTNode* &T)    //层序{    queue<BiTNode*> q;    BiTNode *p = T;    if(p)        q.push(p);    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);    }}int LeafMount(BiTNode* &T)  //叶子节点数{    if(!T)        return 0;    if(!T->lchild&&!T->rchild)        return 1;    return LeafMount(T->lchild) + LeafMount(T->rchild);}int main(){    int i ,j ,a ,b ,t;    CreateBiTree(T);    cout<<"先序:"<<endl;    PreOrderTraverse(T);    cout<<endl;    cout<<"中序:"<<endl;    InOrderTraverse(T);    cout<<endl;    cout<<"后序:"<<endl;    PosOrderTraverse(T);    cout<<endl;    cout<<"层序:"<<endl;    LevelOrderTraverse(T);    cout<<endl;    cout<<"叶子节点数:"<<endl;    cout<<LeafMount(T)<<endl;    return 0;}/*输入样例:ABC##DE#G##F###输出样例:先序:ABCDEGF中序:CBEGDFA后序:CGEFDBA层序:ABCDEFG叶子节点数:3*/


原创粉丝点击