码迷,mamicode.com
首页 > 其他好文 > 详细

DS二叉树—二叉树镜面反转

时间:2020-01-11 20:04:26      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:lse   else   pac   允许   turn   后序   sample   code   clu   

题目描述

假设二叉树用二叉链表存储,用先序序列结果创建。输入二叉树的先序序列,请你先创建二叉树,并对树做个镜面反转,再输出反转后的二叉树的先序遍历、中序遍历、后序遍历和层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。

 

--程序要求--

若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio

程序中若include多过一个头文件,不看代码,作0分处理

不允许使用第三方对象或函数实现本题的要求

 

 

 

输入

测试次数t

每组测试数据是一个二叉树的先序遍历序列,#表示空树

 

输出

对每棵二叉树,输出镜面反转后的先序、中序、后序和层次遍历序列。如果空树,输出四个NULL(后面不加空格)。如下:

NULL

NULL

NULL

NULL

样例输入

3 41#32###65##7## AB#C##D## AB##C##

样例输出

4 6 7 5 1 3 2 7 6 5 4 3 2 1 7 5 6 2 3 1 4 4 6 1 7 5 3 2 A D B C D A C B D C B A A D B C A C B C A B C B A A C B

提示

#include<iostream>
using namespace std;
class BitreeNode
{
public:
    char data;
    BitreeNode *left;
    BitreeNode *right;
    BitreeNode()
    {
        left=right=NULL;
    }
};
 
class Bitree
{
public:
    int pos;
    BitreeNode *Root;
    char *strtree;
    Bitree(char *str)
    {
        pos=0;
        strtree=str;
        Root=CreateBitreeReverse();
    }
    BitreeNode *CreateBitreeReverse()
    {
        char ch=strtree[pos];
        pos++;
        if(ch==#)
            return NULL;
        else
        {
            BitreeNode *T=new BitreeNode();
            T->data=ch;
            T->right=CreateBitreeReverse();
            T->left=CreateBitreeReverse();
            return T;
        }
    }
    void preorder(BitreeNode *T)
    {
        if(T!=NULL)
        {
            cout<<T->data<<" ";
            preorder(T->left);
            preorder(T->right);
        }
        return;
    }
    void inorder(BitreeNode *T)
    {
        if(T!=NULL)
        {
            inorder(T->left);
            cout<<T->data<<" ";
            inorder(T->right);
        }
        return;
    }
    void pastorder(BitreeNode *T)
    {
        if(T!=NULL)
        {
            pastorder(T->left);
            pastorder(T->right);
            cout<<T->data<<" ";
        }
        return;
    }
    void levelorder()
    {
        BitreeNode *Q[100];
        int fr=0;
        int re=0;
        if(Root==NULL)
            return;
        Q[0]=Root;
        re++;
        while(fr!=re)
        {
            BitreeNode *temp=Q[fr];
            cout<<temp->data<<" ";
            if(temp->left!=NULL)
            {
                Q[re]=temp->left;
                re++;
            }
            if(temp->right!=NULL)
            {
                Q[re]=temp->right;
                re++;
            }
            fr++;
        }
        return;
    }
};
 
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        char str[100];
        cin>>str;
        Bitree Tree(str);
        if(Tree.Root==NULL)
        {
            cout<<"NULL"<<endl;
            cout<<"NULL"<<endl;
            cout<<"NULL"<<endl;
            cout<<"NULL"<<endl;
        }
        else
        {
            Tree.preorder(Tree.Root);
            cout<<endl;
            Tree.inorder(Tree.Root);
            cout<<endl;
            Tree.pastorder(Tree.Root);
            cout<<endl;
            Tree.levelorder();
            cout<<endl;
        }
    }
    return 0;
}

DS二叉树—二叉树镜面反转

标签:lse   else   pac   允许   turn   后序   sample   code   clu   

原文地址:https://www.cnblogs.com/SZU-DS-wys/p/12180833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!