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;
    }
}
原文地址:https://www.cnblogs.com/Liu269393/p/10217196.html