zoukankan      html  css  js  c++  java
  • 二叉树的遍历

    #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

  • 相关阅读:
    .net core 经典面试题
    面试常问概念类问题
    常见 .net 面试题目
    Linux 最常用150个命令汇总
    .net core 国际化(web通用版)
    vim 命令合集
    解决Mariadb安装时的Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-qenllaxj/mysqlclient/报错
    正则表达式
    python中的JWT
    chapter2.3、react高阶组件,装饰器
  • 原文地址:https://www.cnblogs.com/hutao886/p/4495300.html
Copyright © 2011-2022 走看看