首页 > 其他分享 > [2004年NOIP普及组] FBI树

[2004年NOIP普及组] FBI树

时间:2022-08-15 17:22:56浏览次数:50  
标签:结点 遍历 2004 NOIP 后序 int wok FBI

我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。
FBI树是一种二叉树[1],它的结点类型也包括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树,并输出它的后序遍历[2]序列。

输入
第一行是一个整数N(0 <= N <= 10),第二行是一个长度为2N的“01”串。
输出
输出一行只包含一个字符串,即FBI树的后序遍历序列。
样例输入
3
10001011
样例输出
IBFBBBFIBFIIIFF

#include<bits/stdc++.h>

using namespace std;

int N,M;
string S; 

int wok(int L,int R)
{
    
    if(L<=R)
    {
        int Zero=0,One=0;
        M=(L+R)>>1;
        if(L!=R)//模拟后序遍历
        {
            wok(L,M); 
            wok(M+1,R); 
        }
        while(L<=R)//对字符串进行判定
        {
            if(S[L++]=='0')
            {
                Zero++;
            }
            else
            {
                One++;
            }
            }
    
           if(Zero==0&&One>0)
        {
            cout<<"I";
        }
        else if(Zero>0&&One==0)
        {
            cout<<"B";
        }
        else
        {
            cout<<"F";
        }
    }
}
    
    

int main()
{
    cin>>N;
    cin>>S;
    
    wok(0,S.length()-1);
    
    return 0;
}

 

标签:结点,遍历,2004,NOIP,后序,int,wok,FBI
From: https://www.cnblogs.com/XdzxBo/p/16588971.html

相关文章

  • [2004年NOIP普及组] FBI树(从下往上推)
    分析:根据样例得下面每有二个,则往上输出一个,以此类推,递推如:下面为10001011先判断b【1】【1】在判断b【1】【2】此时【2】已是偶数,给b【2】【1】赋值(第一个数是在原有层数+......
  • [2004年NOIP普及组] FBI树
    后序遍历:先左儿子,后右儿子,最后根同理类推先序遍历:先根,再左儿子,后右儿子中序遍历:先左儿子,再根,最后右儿子 ......
  • [NOIP2013 提高组] 积木大赛
    试题分析:题目虽然可以用递归,但最优方法还是用贪心,每次输入进去,如果比前一个数小,那么减前一个数时就可以顺便把他减掉,如果大于则还得自己减。代码: ......
  • [2001年NOIP普及组] 求先序排列
    前序遍历的规则:(1)访问根节点   (2)前序遍历左子树(3)前序遍历右子树中序遍历的规则:(1)中序遍历左子树 (2)访问根节点  (3)中序遍历右子树后序遍历二叉树的规则: (1)后序遍历左......
  • [NOIP2004 普及组] FBI 树
    试题分析:题目意思是给出一个数字串,全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。在给定规则的基础上建树,并输出建完的树的后序排列。所以我们要用递......
  • 2001年NOIP普及组] 求先序排列
    2001年NOIP普及组]求先序排列分析:根据题意,已知中序遍历和后序遍历求先序遍历,很显然是用递归求解。我们知道后序遍历中根节点是最后一个,所以可以首先确定根节点的位置,然......
  • [NOIP2001 普及组] 求先序排列
    试题分析:题目中提及了树的先序,中序,后序排列,所以我们需要先知道这三种排列是什么意思。二叉树的3种(深度优先)排列:先序排列,“根左右”。即对于二叉树的每一个子树,先访问其根......
  • NC16645 [NOIP2007]矩阵取数游戏
    题目链接题目题目描述帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数。游戏规则如下:1.每次取数时须从每行各取走一个元素,......
  • noip2018提高组初赛试题
    一、单项选择题(共10题,每题2分,共计20分;每题有且仅有一个正确选项)\2.下列属于解释执行的程序设计语言是()。A.CB.C++C.PascalD.Python答案:D解析:编译语言:C......
  • noip 2014 提高组初赛
    noip2014提高组初赛一、TCP协议属于哪一层协议()A.应用层B.传输层C.网络层D.数据链路层BTCP(传输控制协议)若有变量inta;float:x,y,且a=7,x=2.5,y=......