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

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

    输入格式:

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

     这个博主的代码很棒:https://blog.csdn.net/qq_34594236/article/details/63284822

    #include <iostream>
    #include<cstdio>
    #include<queue>
    using namespace std;
    int a[35],b[35];
    struct node
    {
        int num,right,left;
    }tree[35];
    int n,len;
    int findroot(int k)
    {
        for(int i=1;i<=n;i++)
            if (b[i]==k) return i;
    }
    void buildtree(int root,int l,int r,int fa)
    {
        if (l>r) return;
        int k=findroot(a[root]);
        if (l<k)
        {
            tree[++len].num=a[root+1];
            tree[fa].left=len;
            buildtree(root+1,l,k-1,len);
        }
        if (r>k)
        {
            tree[++len].num=a[root+(k-l)+1];
            tree[fa].right=len;
            buildtree(root+(k-l)+1,k+1,r,len);
        }
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",&b[i]);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)
        {
            tree[i].num=0;
            tree[i].right=-1;
            tree[i].left=-1;
        }
        len=0;
        tree[++len].num=a[1];
        buildtree(1,1,n,1);
        queue<int> s;
        s.push(1);
        int t=0;
        while(!s.empty())
        {
            int k=s.front();
            s.pop(); printf("%d",tree[k].num);
            if (tree[k].right!=-1) s.push(tree[k].right);
            if (tree[k].left!=-1) s.push(tree[k].left);
            if (++t<n) printf(" ");
                else printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    设置Edittext全键盘
    Math中和角度,弧长,tan等相关的算法
    Android:TabLayout的一些设置
    Android;设置TextView加粗 代码设置
    Android:关于Edittext的一些设置
    Android:View颤抖的动画效果代码
    Android:dialog去除边框的实现(自带Style的padding)
    Android:自定义Dialog大小,显示圆角
    Android:EventBus
    SAS宏系统选项SYMBOLGEN MCOMPILENOTE MPRINT<NEST> MLOGIC(NEST)
  • 原文地址:https://www.cnblogs.com/stepping/p/6489998.html
Copyright © 2011-2022 走看看