zoukankan      html  css  js  c++  java
  • PAT 【L2-011 玩转二叉树】

    L2-011 玩转二叉树(25 分)

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

    输入格式:

    输入第一行给出一个正整数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

    • 题解:根据先序和中序遍历建立二叉树,在建立的时候讲原来的左子树变为现在右子树,原来的右子树变为现在的左子树,然后再层序遍历输出。
    • 代码:
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    #include <set>
    #include <map>
    #include <queue>
    using namespace std;
    typedef struct node{
        int data;
        node *lchild,*rchild;
    }BiTNode,*BiTree;
    int a[33];
    BiTree create(int in[],int pre[],int n){
        if(n<=0) return NULL;
        int t,root=pre[0];
        for(int i=0;i<n;i++){
            if(in[i]==root){
                t=i;
                break;
            }
        }
        BiTree T;
        T = new BiTNode;//分配存储空间
        T->lchild=NULL;
        T->rchild=NULL;
        T->data=root;
        T->lchild=create(in+t+1,pre+t+1,n-t-1);//原来的右子树变为现在的左子树
        T->rchild=create(in,pre+1,t);//原来的左子树变为现在的右子树
        return T;
    }
    void levelOrder(BiTree T){//层序遍历
        queue<BiTree> q;
        q.push(T);
        int i=0;
        while(!q.empty()){
            BiTree t;
            t=q.front();
            a[i++]=t->data;
            q.pop();
            if(t->lchild) q.push(t->lchild);
            if(t->rchild) q.push(t->rchild);
        }
    }
    int main()
    {
        int n;
        int in[33],pre[33];
        cin>>n;
        for(int i=0;i<n;i++)
            cin>>in[i];
        for(int i=0;i<n;i++)
            cin>>pre[i];
        BiTree T;
        T = new BiTNode;
        T->lchild=NULL;
        T->rchild=NULL;
        T=create(in,pre,n);
        levelOrder(T);
        for(int i=0;i<n-1;i++){
            printf("%d ",a[i]);
        }
        printf("%d
    ",a[n-1]);
        return 0;
    }
    

  • 相关阅读:
    生命周期钩子函数
    Spring Cloud Alibaba-Gateway之路由、限流、熔断、日志、鉴权(3)
    SpringBoot项目基础搭建(1)
    Spring Cloud Alibaba-Sentinel之限流、熔断(2)
    cap理论? cp ap原则的含义
    Spring Cloud Alibaba-Nacos配置、注册(1)
    SpringCloud路由Gateway(5)
    SpringCloud熔断监控Hystrix Dashboard和Turbine(4)
    SpringCloud熔断器Hystrix引用feign(3)
    SpringCloud注册中心Eureka(2)
  • 原文地址:https://www.cnblogs.com/kzbin/p/9205191.html
Copyright © 2011-2022 走看看