zoukankan      html  css  js  c++  java
  • DS二叉树--二叉树构建与遍历

    题目描述

    给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘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 *left;
        BitreeNode *right;
        BitreeNode():left(NULL),right(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->left = CreateBitree();
            T->right = CreateBitree();
        }
        return T;
    }
    void Bitree::PreOrder()
    {
        PreOrder(Root);
    }
    void Bitree::PreOrder(BitreeNode *t)
    {
        if (t)
        {
            cout << t->data;
            PreOrder(t->left);
            PreOrder(t->right);
        }
    }
    
    int main()
    {
        int t;
        cin >> t;
        while (t--)
        {
            string str;
            cin >> str;
            Bitree *tree;
            tree = new Bitree();
            tree->CreateTree(str);
            tree->PreOrder();
            cout << endl;
        }
    }
  • 相关阅读:
    【数量技术宅|量化投资策略系列分享】股指期货IF分钟波动率统计策略
    【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫
    0-1背包问题
    活动选择的贪心算法与动态规划
    图的邻接表、拓扑排序、无权最短路径和加权最短路径
    把二叉树转变为左孩子右兄弟树
    基于接缝裁剪的图像压缩 算法导论
    公司聚会
    二叉堆部分练习
    编辑距离问题
  • 原文地址:https://www.cnblogs.com/Liu269393/p/10217196.html
Copyright © 2011-2022 走看看