| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1477 人关注过本帖
标题:ACM题目———fbi树
只看楼主 加入收藏
manesol
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2013-7-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
ACM题目———fbi树
题目描述

  我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。
  FBI树是一种二叉树1,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2^N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:
  1) T的根结点为R,其类型与串S的类型相同;
  2) 若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。
  现在给定一个长度为2^N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历2序列。
输入格式

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

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

输入:
3
10001011

输出:
IBFBBBFIBFIIIFF

程序代码:
#include <IOSTREAM>
#include <STRING>

using namespace std;

char fbitree(string s,int n)
{
    if(n==0)
    {
        if(s[0]=='0'){//貌似这里的判断有问题啊,输入11111111输出IIIIIIIIIIIIIII对的,但是输入00000000就不对啊
            cout<<"B";
            return 'B';
        }
        else{
            cout<<"I";
            return 'I';
            }
    }
    else 
    {
        char w=fbitree(s.substr(0,s.size()/2-1),n-1);
        char v=fbitree(s.substr(s.size()/2,s.size()-1),n-1);
        if(w=='B'&&v=='B')
        {
            cout<<"B";
            return 'B';
        }else if(w=='I'&&v=='I')
        {
            cout<<"I";
            return 'I';
        }else{
            cout<<"F";
            return 'F';
        }
    }
}

int main(void)
{
    int n;
    string s;
    cin>>n;
    cin>>s;
    fbitree(s,n);
    cout<<endl;
    return 0;
}

搜索更多相关主题的帖子: 二叉树 字符串 左右 
2013-08-04 17:21
manesol
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2013-7-6
收藏
得分:0 
快来20分就是你的
2013-08-04 17:50
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:20 
问题不在你想的哪里。

在这里:

        char w=fbitree(s.substr(0,s.size()/2-1),n-1);
        char v=fbitree(s.substr(s.size()/2,s.size()-1),n-1);

改成

        char w=fbitree(s.substr(0,s.size()/2),n-1);
        char v=fbitree(s.substr(s.size()/2,s.size()),n-1);

重新学习一下substr方法的定义。

重剑无锋,大巧不工
2013-08-04 17:59
manesol
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2013-7-6
收藏
得分:0 
回复 3楼 beyondyf
2013-08-04 18:08
快速回复:ACM题目———fbi树
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.056439 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved