7-1 玩转二叉树

给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。

输入格式:

输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。

输出格式:

在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。

输入样例:

复制代码
7
1 2 3 4 5 6 7
4 1 3 2 6 5 7

输出样例:

复制代码
4 6 1 7 5 3 2

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

复制代码
#include<stdio.h>
#include<stdlib.h>
typedef int ElementType;//给int取别名
typedef struct Tree* BinTree;//给节点取别名
struct Tree
{
    ElementType Data;
    BinTree Left;
    BinTree Right;
};
int qian[100],zhong[100];
BinTree Creat(int q,int z,int n)
{
    BinTree T;
    int i;
    if(n<=0)
    {
        return T=NULL;
    }
    else
    {
        T=(BinTree)malloc(sizeof(struct Tree));
        T->Data=qian[q];
        for(i=0;qian[q]!=zhong[z+i];i++);
        T->Left=Creat(q+1,z,i);
        T->Right=Creat(q+i+1,z+i+1,n-i-1);
    }
    return T;//返回树根节点
}
void LevelorderTraversal(BinTree T)
{
    BinTree Q,a[1000];
    int front=0,tail=0;
    static int c=0;
    if(T)
    {
        a[++tail]=T;
    }
    while(front!=tail)
    {
        Q=a[++front];
        if(c==0)
        {
            printf("%d",Q->Data);
            c++;
        }
        else
        {
            printf(" %d",Q->Data);
        }
        if(Q->Right)
        {
            a[++tail]=Q->Right;
        }
        if(Q->Left)
        {
            a[++tail]=Q->Left;
        }
    }
}
int main()
{
    int N;
    BinTree T;
    scanf("%d",&N);//输入一个正整数
    for(int i=0;i<N;i++)
    {
        scanf("%d",&zhong[i]);
    }
    for(int i=0;i<N;i++)
    {
        scanf("%d",&qian[i]);
    }
    T=Creat(0,0,N);
    LevelorderTraversal(T);
    return 0;
}
相关推荐
疋瓞20 分钟前
C++_STL和数据结构《1》_STL、STL_迭代器、c++中的模版、STL_vecto、列表初始化、三个算法、链表
数据结构·c++·算法
JJJJ_iii22 分钟前
【左程云算法09】栈的入门题目-最小栈
java·开发语言·数据结构·算法·时间复杂度
三体世界31 分钟前
测试用例全解析:从入门到精通(1)
linux·c语言·c++·python·功能测试·测试用例·测试覆盖率
Bear on Toilet1 小时前
继承类模板:函数未在模板定义上下文中声明,只能通过实例化上下文中参数相关的查找找到
开发语言·javascript·c++·算法·继承
金融小师妹1 小时前
多因子AI回归揭示通胀-就业背离,黄金价格稳态区间的时序建模
大数据·人工智能·算法
程序员东岸1 小时前
C语言入门指南:字符函数和字符串函数
c语言·笔记·学习·程序人生·算法
小猪咪piggy1 小时前
【算法】day2 双指针+滑动窗口
数据结构·算法·leetcode
max5006002 小时前
OpenSTL PredRNNv2 模型复现与自定义数据集训练
开发语言·人工智能·python·深度学习·算法
budingxiaomoli2 小时前
AVL树知识总结
数据结构·算法
jz-炸芯片的zero2 小时前
【Zephyr电源与功耗专题】14_BMS电池管理算法(三重验证机制实现高精度电量估算)
单片机·物联网·算法·zephyr·bms电源管理算法