FBI树

通过递归构造二叉树,根据字符串类型确定节点类型,再对构造的树进行后序遍历输出结果

#include<bits/stdc++.h>
using namespace std;

struct FBINode {
    char type; // 节点类型
    FBINode* left; 
    FBINode* right; 
    FBINode(char t) : type(t), left(nullptr), right(nullptr) {}
};
// 判断字符串对应的节点类型
char getNodeType(const string& s) {
    bool has0 = false, has1 = false;
    for (char c : s) {
        if (c == '0') has0 = true;
        else has1 = true;
        if (has0 && has1) return 'F'; // 1和0F
    }
    return has0 ? 'B' : 'I'; // 全0为B,全1为I
}
// 递归构造FBI树
FBINode* build(const string& s) {
    char t = getNodeType(s);
    FBINode* root = new FBINode(t);
    if (s.length() == 1) return root; // 长度1,无左右子树
    
    int mid = s.length() / 2;
    // 分割左右子串,构造左右子树
    root->left = build(s.substr(0, mid));
    root->right = build(s.substr(mid));
    return root;
}
void ans(FBINode* root) {
    if (!root) return;
    ans(root->left);
    ans(root->right);
    cout << root->type;
}

int main(){
    int n;
    string s;
    cin >> n >> s;
    FBINode* root = build(s);
    ans(root);
    return 0;
}

时间复杂度: O(2 ^N )

全部评论

相关推荐

03-03 19:02
已编辑
东华理工大学 Node.js
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务