• FBI树-数据结构(二叉树)


    FBI树-数据结构(二叉树)

    问题 B: [2004_p4]FBI树-数据结构

    时间限制: 1 Sec  内存限制: 125 MB
    提交: 57  解决: 46

    题目描述

    我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。

    FBI树是一种二叉树(如下图),它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:

    1) T的根结点为R,其类型与串S的类型相同;

    2) 若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。

    现在给定一个长度为2N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历序列。
     

    输入

    每组输入数据的第一行是一个整数N(0<=N<=10),第二行是一个长度为2N的“01”串。

    数据规模:
    对于40%的数据,N<=2;
    对于全部的数据,N<=10。

     

    输出

    每组输出包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。

    样例输入

    3
    10001011

    样例输出

    IBFBBBFIBFIIIFF

    提示

    #include<iostream>
    using namespace std;
    int n;
    string b; 
    int a[10000];
    //I=1,B=0,F=2
    void out(int root)
    {
        if(root==0)
        {
            cout<<"B";
        }
        else if(root==1)
        {
            cout<<"I";
        }
        else{
            cout<<"F";
        }
        //cout<<endl;
    }
    int print(int l,int r)
    {
        //cout<<"l "<<l<<" r "<<r<<endl;
        if(r==l)
        {
            if(a[r]==1){
                return 1;
            }
            else
            {
                return 0;
            }
        };
        if((l+r)/2>=l)
        {
            int xl= print(l,(l+r)/2);
            out(xl);
            int xr = print((l+r)/2+1,r);
            out(xr);
            int root;
            if(xl==0&&xr==0)
            {
                root=0;
            }
            else if(xl==1&&xr==1)
            {
                root=1;
            }
            else{
                root=2;
            }
            //out(root);
            return root;
        }
        return 0;
    }
    int main()
    {
        cin>>n;
        cin>>b;
        int len=b.length();
        for(int i=0;i<len;i++)
        {
            a[i+1]=b[i]-'0';
        }
        int root=print(1,len);
        out(root);
        return 0;
    }
     
  • 相关阅读:
    python manage.py runserver 0.0.0.0:8000 zkz的专栏 博客频道 CSDN.NET
    分享:Intel 发布 Android 模拟器的 x86 系统映像
    分享:TreeFrog 1.1 发布,C++ Web 应用开发框架
    update R on ubuntu
    分享:FastFlow 2.0 发布,多核编程框架
    分享:centos daemon make and install
    LINQ TO SQL三层架构~更新操作
    泛型中的协变
    MVC中的统一验证机制~续
    LINQ TO SQL三层架构~添加操作
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/13270780.html
Copyright © 2020-2023  润新知