FBI树-蓝桥571

读题:(说实话我就是读不懂题)

1

一个地方一开始我觉得不理解:“含0和1的串叫F串,FBI树是一种二叉树,它的结点类型包括F结点,B结点,I结点”,可是一个结点不就是0或者1吗

不是的!既然说某个结点是含0和1的串的结点,说明就是在说这个结点它是父结点,它的儿子或者孙子是包含0和1的,也就是B和I

2

长度为2^n的01串可以构造出二叉树,并且是按串的平均分的左右两边去分别构造左子树和右子树的,这告诉我们,串的值就是叶子结点啊(叶子结点:二叉树的最底层的结点)

3思路

所以我们只用从底向上,从叶子结点开始赋值,一直往上面走为各个父结点赋值即可,用的是dfs,可以记住常见的用法,一般构造二叉树经常用dfs;

另外,后序遍历就是另一个知识点啦。

4满二叉树已知叶子结点个数

1)

对于一个满二叉树,已知其叶子结点的个数为n,则这个树的所有结点个数为2n-1;

对于非满二叉树,所有结点的个数就是:n<结点总个数<2n-1。

2)

所以这道题叶子结点个数为2^n,总结点个数就是2^(n+1)-1。那为什么这棵FBI树是满二叉树呢:因为题目说了把这个串从中间分开左右分别构造左右子树,而且长度是2^n,很明显是偶数是可以被平均分的,那么左右子树的叶子结点个数都一样,其实并没有说这是一个满二叉树,只是用满二叉树来存储,因为叶子结点0或者1,就是只代表一个字母啊。

但是也没有说不能左右子树层数不一样吧:我觉得是最大限度是左右层数都是满的,而放什么放不放取决于到时候父结点的赋值吧

5满二叉树已知元素个数

一个满二叉树,已知有元素个数是m个,则需要4m个节点空间存放完全二叉树(极端情况)。

如何理解:m想做是叶子结点所在层的所有结点个数(包括此结点是空的和不空的),因为这个存储空间也是考虑了叶子结点所在层这些叶子结点的子节点(因为声明结构体的时候每个节点都是有左右子结点的)

其他知识点

1cin数组名+1,相当于从这个数组的第二个位置开始存数

    char s[4];//输入1234
    
    //这两个等价
//    cin>>s+1;
    scanf("%s",s+1);
    
    cout<<s[0]<<endl;//输出换行
    cout<<s[1]<<endl;//输出1
    for(int i=0;i<sizeof(s);i++)
    {
        cout<<s[i];
    }//输出123

2移位操作

p<<1

p<<1|1

完整代码

#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int n;
char s[1024],tree[4096];
//视作箭头,左乘右除
int ls(int p)
{return p<<1;//p*2
}
int rs(int p)
{return p<<1|1;//p*2+1
}
void build_fbi(int p,int left,int right)
{if(left==right)//{if(s[right]=='1'){tree[p]='I';}else{tree[p]='B';}return;}//没走到叶子结点,就继续二分往下走int mid=(left+right)/2;build_fbi(ls(p),left,mid);build_fbi(rs(p),mid+1,right);if(tree[ls(p)]=='B'&&tree[rs(p)]=='B'){tree[p]='B';}else if(tree[ls(p)]=='I'&&tree[rs(p)]=='I'){tree[p]='I';}else{tree[p]='F';}
}void postorder(int p)//后序遍历,对于二叉树这个数组存放的,左右父
{//可以看见内部外部都是遵循左右父顺序if(tree[ls(p)])//如果当前节点有左儿子,则再以此左儿子作为父结点,去后序遍历他的子树{postorder(ls(p));}if(tree[rs(p)]){postorder(rs(p));}cout<<tree[p];
}int main()
{cin>>n;cin>>s+1;build_fbi(1,1,strlen(s+1));//参数:此节点,此节点左,此节点右postorder(1);//从根结点往里走,二叉树的遍历都是这样return 0;
}

测试用例:

输入:

3
10001011


输出:IBFBBBFIBFIIIFF

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx详解:高性能Web服务器与反向代理的奥秘

Nginx&#xff0c;发音为“engine-x”&#xff0c;是一个开源、高性能的HTTP和反向代理服务器&#xff0c;也是邮件代理服务器。自2004年首次发布以来&#xff0c;Nginx凭借其轻量级、高效能和高并发处理能力&#xff0c;在互联网领域迅速崛起&#xff0c;成为许多大型网站和高…

【Spark】Spark编程体验,RDD转换算子、执行算子操作(六)

Spark编程体验 项目依赖管理 <dependencies><dependency><groupId>org.scala-lang</groupId><artifactId>scala-library</artifactId><version>2.12.10</version></dependency><dependency><groupId>org.ap…

Bootstrap前端框架简

Bootstrap具有多种含义和用法&#xff0c;具体如下&#xff1a; 在计算机术语中&#xff0c;Bootstrap&#xff08;引导&#xff09;指一种设计成通过自己的操作使其自身处于期望状态的技术或设备&#xff0c;例如一种机器例程&#xff0c;该例程的头几个指令足以使引导其自身…

银河麒麟V10终端出现“/home/kylin/.config/caja”读写权限问题,进程杀不掉。解决办法

问题如上图所示&#xff0c;一直关不了进程&#xff0c;桌面显示不正常。 解决办法 步骤一&#xff1a;切换字符登录“ctrl alt f1切字符登录下”。&#xff08;先输用户名&#xff0c;回车输密码&#xff09; 步骤二&#xff1a;删除“caja”缓存文件&#xff08;rm -r /home/…

记一次从jenkins安装到构建出第一个jar

1.安装 官方教程见&#xff1a;https://www.jenkins.io/zh/doc/book/installing/ 可以选择docker安装相对简单。 docker环境安装见https://blog.csdn.net/taotao_guiwang/article/details/135508643 2.环境配置 见https://blog.whsir.com/post-4865.html 注意&#xff1a…

Python3 笔记:循环结构 while语句

while语句的格式&#xff1a; while 条件表达式: 循环体 while语句是一个条件循环语句&#xff0c;即首先计算表达式&#xff0c;条件表达式的值为真时&#xff0c;依次执行while语句中的循环体语句&#xff0c;直到条件表达式的值为假时跳出循环&#xff0c;执行下一条语…

智能终端RK3568主板在智慧公交条形屏项目的应用,支持鸿蒙,支持全国产化

基于AIoT-3568A的智慧公交条形屏&#xff0c;可支持公交线路动态展示&#xff0c;语音到站提醒&#xff0c;减少过乘、漏乘的情况&#xff0c;有效提高了公交服务效率和质量&#xff0c;为乘客提供了更舒适、更安全和更方便的出行体验&#xff0c;为城市的发展增添了新的活力。…

day5

利用迭代器&#xff01; #include <vector> #include <map>class Solution { public:std::vector<int> intersection(std::vector<int>& nums1, std::vector<int>& nums2) {std::map<int, int> Mymap;std::vector<int> qq…

程序员的神奇应用:从代码创造到问题解决的魔法世界之 自动化测试工具

文章目录 自动化测试工具 在软件开发的海洋中&#xff0c;程序员的实用神器如同航海中的指南针&#xff0c;帮助他们导航、加速开发、优化代码质量&#xff0c;并最终抵达成功的彼岸。这些工具覆盖了从代码编写、版本控制到测试和部署的各个环节。 在当今数字化的世界里&#x…

了解macOS|为macOS终端配置代理

背景&#xff1a;当我们在终端进行各种包、软件的下载时&#xff0c;可以配置镜像源&#xff0c;但是感觉还是太慢&#xff0c;有梯子的话&#xff0c;还是直接在终端配置代理吧。 一、bash配置 修改用户全局配置文件&#xff1a; vim ~/.bash_profile在配置文件末尾添加代理…

在Nginx配置文件中设置语法高亮

在管理Web服务器时&#xff0c;配置文件的可读性极为重要。Nginx作为一个高性能的HTTP和反向代理服务器&#xff0c;它的配置文件复杂度往往较高&#xff0c;尤其是在处理大型应用或多个站点时。为了提高配置过程的效率和减少错误&#xff0c;使用语法高亮显示是一种非常有效的…

windows上vcpkg install openssl失败后手动nmake编译安装openssl

最近需要移植一个跨平台项目代码到windows上&#xff0c;其中依赖curl和openssl&#xff1b; ** 1.vcpkg安装 ** 首先自然而然想到使用vckpg进行包管理&#xff0c;因为不牵扯到多项目引用&#xff0c;所以用vcpkg的经典模式进行安装&#xff1a; 项目依赖的curl版本是8.6.…

31万奖金池等你挑战!IJCAI 2024 第九届“信也科技杯”全球AI算法大赛正式开赛!聚焦AI尖端赛题!

文章目录 ⭐️ 赛事概况⭐️ 赛事奖励⭐️ 赛事日程速览⭐️ 报名通道与赛事交流群⭐️ 关于 “信也科技杯”⭐️ 关于信也科技 ⭐️ 赛事概况 随着语音合成技术的不断进步,合成语音与真实语音之间的界限变得模糊,这不仅对数据安全构成威胁,也对科技伦理提出了新的要求。 第九…

ValueError: source code string cannot contain null bytes

导入pandas报如下错误&#xff1a; 解决&#xff1a; pandas好像只支持到3.8&#xff0c;我的python是3.10&#xff0c;改成3.7就能正常使用了

【stm32-5】输入捕获模式测频率PWMI模式测频率占空比

1.输入捕获模式测频率 &#xff08;1&#xff09;main.c #include "Device/Include/stm32f10x.h" // Device header #include "pwm.h" #include "delay.h" #include "OLED.h" #include "IC.h" uint8_t i; int main(void…

202103青少年软件编程(Python)等级考试试卷(二级)

第 1 题 【单选题】 对于字典 infor {“name”:“tom”, “age”:13, “sex”:“male”}&#xff0c; 删除"age":13 键值对的操作正确的是&#xff1f;&#xff08; &#xff09; A :del infor[‘age’] B :del infor[“age”:13] C : del infor D : infor.cle…

OceanBase 分布式数据库【信创/国产化】- OceanBase 并行执行

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 并行执行前言OceanBase 数据更新架构并行执行概念什么场景适用并行执行什么场景不适用并行执行OceanBase 并行执行硬件要求并行执行工作原理生产者-消费者流水线模型通过均衡负载来优化性能Oc…

idea连接远程仓库

git ->克隆。 url为远程仓库的地址&#xff0c;输入好后&#xff0c;选择项目存放目录&#xff0c;再点击克隆 点击新窗口打开。 切换到对应分支

使用Xshell工具连接ubuntu-方便快捷

使用Xshell连接ubuntu 在命令行输入 “sudo apt-get install openssh-server”安装openssh-server 开启 ssh-server&#xff0c;在命令行输入 “service ssh start”&#xff0c;然后输入密码即可

人情世故学不完

人情世故学不完: 1、跟太熟的人&#xff0c;少说谢谢&#xff0c;不用急着还人情&#xff0c;真朋友反而不在意这些&#xff0c;坦然&#xff0c;讨喜。 2、跟不熟悉的人&#xff0c;不开玩笑&#xff0c;不说反话&#xff0c;简单直接&#xff0c;减少麻烦。 3、不要当着外…