蒟蒻思路,样例都没过,求调QWQ
查看原帖
蒟蒻思路,样例都没过,求调QWQ
908638
chair0114楼主2023/8/26 08:03

满二叉树做法

结构体存左右节点,数组存所有节点和叶。

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<cctype>
using namespace std;
int n,s;
int a[1505];
int ch[1500];
struct node{
    int x,y;   
}q[1500];
void tree_last(int k){
    if(q[k].x != 0)tree_last(q[k].x);
    if(q[k].y != 0)tree_last(q[k].y);
    cout<<(char)ch[k];
}
int main(){
    cin>>n;
    s = pow(2,n);
    for(int i = 1;i <= pow(2,n); ++i){
        scanf("%1d",&a[i]);
        if(a[i] == 0) ch[s++] = (int) 'B';
        else ch[s++] = (int) 'I';
    }
    s = pow(2,n) * 2 - 1;
    for(int i = s;i >= 1; i -= 2){
        if(ch[i] == ch[i - 1]) ch[(i + (i - 1)) / 4] = ch[i];
        else ch[(i + (i - 1)) / 4] = (int) 'F';
    }
    s = pow(2,n) - 1;
    for(int i = 1;i <= s; ++i){
        q[i].x = (int) ch[i * 2];
        q[i].y = (int) ch[i * 2 + 1];
    }
    ch[0] = 0;
    //for(int i = 1;i <= 15;++i) cout<<q[i].x<<" "<<q[i].y<<endl;
    //cout<<q[9].x;
    tree_last(1);
    puts(" ");
    return 0;
}

样例输出

F
2023/8/26 08:03
加载中...