题解 | #FBI树#

FBI树

https://ac.nowcoder.com/acm/problem/16660

  • 题目考点:分治(二分)
  • 题目内容:给出一个01串,将其不断二分成一颗二叉树,求后序遍历;遍历过程中,若某一节点儿子均为1,输出‘I’,若均为0,输出‘F’,否则输出‘F’;
  • 题目分析:如题目样例:
    3
    10001011
    则有:
    图片说明
#include<iostream>
#include<algorithm>

using namespace std;

int n;
string s;

char FBI(int l, int r)
{
    if(l == r) //若已经到了叶子节点,直接返回
    {
        if(s[l] == '0')
        {
            cout<<'B'; return 'B';
        }
        if(s[l] == '1')
        {
            cout<<'I'; return 'I';
        }
    }
    int mid = l + r >> 1; //没有到叶子结点,继续二分
    char sonl = FBI(l+1-1, mid);
    char sonr = FBI(mid + 1, r);
    //根据儿子节点的情况输出并返回
    if((sonl == 'F' || sonr == 'F') || sonl != sonr)
    {
        cout<<'F'; return 'F';
    }
    if(sonl == 'I')
    {
        cout<<'I'; return 'I';
    }
    cout<<'B'; return 'B';
}

int main()
{
    int n;
    cin >> n >> s;
    FBI(0, s.size() - 1);
    return 0;
}
题解专栏 文章被收录于专栏

希望不断进步

全部评论

相关推荐

找不到工作死了算了:没事的,雨英,hr肯主动告知结果已经超越大部分hr了
点赞 评论 收藏
分享
10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
评论
4
收藏
分享
牛客网
牛客企业服务