• 二叉树的遍历


    #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

  • 相关阅读:
    读取xml文件到实体
    dev常用控件的属性
    委托和事件
    GridControl应用
    关于DataTable的处理
    SQL2
    xaml地址写法
    sql临时表的创建及赋值
    wpf 图片缩放
    NIO简介
  • 原文地址:https://www.cnblogs.com/hutao886/p/4495300.html
Copyright © 2020-2023  润新知