zoukankan      html  css  js  c++  java
  • 基础数据结构-二叉树-二叉树构建与先中后序遍历

    给定一颗二叉树的逻辑结构,(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构,并输出该二叉树的先序遍历、中序遍历和后序遍历结果
    输入

    第一行输入一个整数t,表示有t个二叉树

    第二行起输入每个二叉树的先序遍历结果,空树用字符‘0’表示,连续输入t行

    输出

    输出每个二叉树的先序遍历、中序遍历和后序遍历结果

    样例输入

    2
    AB0C00D00
    AB00C00
    样例输出

    ABCD
    BCAD
    CBDA
    ABC
    BAC
    BCA

    #include<iostream>
    #include<string>
    using namespace std;
    
    class BiTreeNode
    {
    public:
        char data;        //结点数据
        BiTreeNode *LeftChild;    //左子树指针
        BiTreeNode *RightChild;        //右子树指针
        BiTreeNode():LeftChild(NULL),RightChild(NULL){}
        ~BiTreeNode(){}
    };
    
    class BiTree
    {
    private:
        BiTreeNode *Root;    //根结点指针
        int pos;
        string strTree;
        BiTreeNode *CreateBiTree();
        void PreOrder(BiTreeNode *t);
        void InOrder(BiTreeNode *t);
        void PostOrder(BiTreeNode *t);
    public:
        BiTree(){};
        ~BiTree(){};
        void CreateTree(string TreeArray);
        void PreOrder();
        void InOrder();
        void PostOrder();
    };
    
    //构造二叉树,利用先序遍历结果建树
    void BiTree::CreateTree(string TreeArray)    //公有函数,对外接口
    {
        pos = 0;
        strTree.assign(TreeArray);
        Root = CreateBiTree();
    }
    
    BiTreeNode *BiTree::CreateBiTree()    //递归建树,私有函数,类内实现
    {
        BiTreeNode *T;
        char ch;
        ch=strTree[pos++];
        if(ch=='0')
            T = NULL;
        else
        {
            T = new BiTreeNode();
            T->data = ch;        //生成根结点
            T->LeftChild = CreateBiTree();    //构造左子树
            T->RightChild = CreateBiTree();    //构造右子树
        }
        return T;
    }
    
    //定义先序遍历函数
    void BiTree::PreOrder()    //公有函数,对外接口
    {
        PreOrder(Root);
    }
    
    void BiTree::PreOrder(BiTreeNode *t)    //私有函数,类内实现
    {
        if(t!=NULL)
        {
            cout << t->data;    //输出当前结点t的数据,表示t已经访问
            PreOrder(t->LeftChild);    //先序遍历t的左孩子
            PreOrder(t->RightChild);    //先序遍历t的右孩子
        }
    }
    
    //定义中序遍历函数
    void BiTree::InOrder()    //公有函数,对外接口
    {
        InOrder(Root);
    }
    
    void BiTree::InOrder(BiTreeNode *t)    //私有函数,类内实现
    {
        if(t)
        {
            InOrder(t->LeftChild);    //中序遍历t的左孩子
            cout << t->data;        //输出当前结点t的数据,表示t已经访问
            InOrder(t->RightChild);    //中序遍历t的右孩子
        }
    }
    
    //后序遍历函数
    void BiTree::PostOrder()    //公有函数,对外接口
    {
        PostOrder(Root);
    }
    
    void BiTree::PostOrder(BiTreeNode *t)    //私有函数,类内实现
    {
        if(t)
        {
            PostOrder(t->LeftChild);    //后序遍历t的左孩子
            PostOrder(t->RightChild);    //后序遍历t的右孩子
            cout << t->data;        //输出当前结点t的数据,表示t已经访问
        }
    }
    
    int main(void)
    {
        int t;
        BiTree T;
        string str;
        cin >> t;
        for(int i=0;i<t;i++)
        {
            cin >> str;
            T.CreateTree(str);
            T.PreOrder();
            cout << endl;
            T.InOrder();
            cout << endl;
            T.PostOrder();
            cout << endl;
        }
        return 0;
    }
  • 相关阅读:
    DIY组装机
    伯努利数学习笔记的说...
    心得分享 | 软件研发效能(1)
    开发板烧录教程
    解决Windows7/10系统连接网线后显示“未识别的网络”的问题
    雷达扫描
    经验学习
    1045 Access denied for user 'root'@'localhost' (using password:YES)
    json格式化工具
    mysql安装出现error Nr.1045
  • 原文地址:https://www.cnblogs.com/nathaneko/p/6491812.html
Copyright © 2011-2022 走看看