zoukankan      html  css  js  c++  java
  • TZOJ 5225: 玩转二叉树

    描述

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

     

    输入

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

     

    输出

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

    样例输入

    样例输出

    解题思路

    解题思路对于一棵树来说前序的第一个是树的根,记录下来然后到中序里面去找
    中序的左边做左子树,右边为为右子树,然后递归建树

    菜鸡的成长史

    觉得写的对你有帮助的关注下^-^

    #include <bits/stdc++.h>
    using namespace std;
    int Qi[50],Zh[50];
    struct Node
    {
        int data;
        Node* left;
        Node* right;
    };
    Node* creat(int ZL,int ZR,int QL,int QR)
    {          //ZL中序左边 ZR中序右边 QL前序左边 QR前序右边
        if(QL>QR) return NULL;   //返回条件
        Node *root=new Node;
        root->data=Qi[QL];
        int biaoji;
        for(int i=0;i<=ZR;i++)
        {
            if(Zh[i]==Qi[QL]) //找出根节点在中序遍历的位置
                {biaoji=i;break;}
        }
        int geshu=biaoji-ZL; //左子树 有几个
        root->left=creat(ZL,biaoji-1,QL+1,QL+geshu);
        root->right=creat(biaoji+1,ZR,QL+geshu+1,QR); //递归建树 理解表层不要深究里面的
        return root; //对递归的理解有推出条件,思路理清就行 ^-^菜鸡的理解
    }
    
    void printtf(Node *tree)    //层次遍历
    {
        queue<Node*> que;
        que.push(tree);
        int flag=0;
        while(!que.empty())
        {
            Node *e=que.front();
            que.pop();
            if(flag!=0)
                cout << " ";
            cout << e->data;flag=1;
            if(e->right!=NULL)     //镜面反转:本来左到右 现在右到左
                que.push(e->right);
            if(e->left!=NULL)
                que.push(e->left);
        }
        cout << endl;
    }
    
    int main()
    {
        int n;
        cin>>n;
        for(int i=0;i<n;i++)
            cin>>Zh[i];
        for(int i=0;i<n;i++)
            cin>>Qi[i];
        Node *tree=creat(0,n-1,0,n-1);
        printtf(tree);
        return 0;
    }

    不懂的可以访问下这个帮助理解

    http://www.cnblogs.com/liujinghuan/p/5842487.html

     

  • 相关阅读:
    准备开发一门科学(工程)计算语言
    编译器二次开发定制服务?
    C#中的委托
    asp.net网页代码清理文件夹下面的数据
    类型“System.Web.UI.UpdatePanel”不具有名为“DropDownList”的公共属性,解决方法
    AutoPostBack 与UpdatePanel的局部刷新
    asp.net截取指定字符后面的字符串
    asp.net 各种格式的时间格式
    UpdatePane刷新和Ajax控件Timer的问题,刷新没有效果,解决方法
    ACCESS模糊查询
  • 原文地址:https://www.cnblogs.com/qq-1585047819/p/10544343.html
Copyright © 2011-2022 走看看