DS二叉树—二叉树构建与遍历(不含框架)

牧云@^-^@ 提交于 2019-12-18 10:16:42

DS二叉树—二叉树构建与遍历(不含框架)

题目描述

给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘#’表示,例如AB#C##D##),建立该二叉树的二叉链式存储结构,并输出该二叉树的先序遍历、中序遍历和后序遍历结果。在这里插入图片描述

输入

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

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

输出

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

样例输入

2
AB#C##D##
AB##C##

样例输出

ABCD
BCAD
CBDA
ABC
BAC
BCA

#include <iostream>
using namespace std;

class BiNode{
    char data;
    BiNode *lChild;
    BiNode *rChild;
public:
    BiNode():lChild(NULL),rChild(NULL){}
    BiNode(char e):data(e),lChild(NULL),rChild(NULL){}
    ~BiNode(){delete lChild;delete rChild;}
    friend class BiTree;
};

class BiTree{
    BiNode *root;
    void CreateTree(BiNode *&t);
    void PreOrder(BiNode *t);
    void MidOrder(BiNode *t);
    void PostOrder(BiNode *t);
public:
    BiTree():root(NULL){}
    ~BiTree(){delete root;}
    void CreateTree();
    void PreOrder();
    void MidOrder();
    void PostOrder();

};

void BiTree::CreateTree(BiNode *&t) {
    char c;
    cin>>c;
    if(c != '#')
    {
        t = new BiNode(c);
        CreateTree(t->lChild);
        CreateTree(t->rChild);
    }
    else
        t = NULL;
}

void BiTree::CreateTree() {
    CreateTree(root);
}

void BiTree::PreOrder(BiNode *t) {
    if(t)
    {
        cout<<t->data;
        PreOrder(t->lChild);
        PreOrder(t->rChild);
    }
}

void BiTree::PreOrder() {
    PreOrder(root);
    cout<<endl;
}

void BiTree::MidOrder(BiNode *t) {
    if(t)
    {
        MidOrder(t->lChild);
        cout<<t->data;
        MidOrder(t->rChild);
    }
}

void BiTree::MidOrder() {
    MidOrder(root);
    cout<<endl;
}

void BiTree::PostOrder(BiNode *t) {
    if(t)
    {
        PostOrder(t->lChild);
        PostOrder(t->rChild);
        cout<<t->data;
    }
}

void BiTree::PostOrder() {
    PostOrder(root);
    cout<<endl;
}

int main()
{
    int t;
    cin>>t;
    while (t--)
    {
        BiTree myTree;
        myTree.CreateTree();
        myTree.PreOrder();
        myTree.MidOrder();
        myTree.PostOrder();
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!