当前位置: 首页 > news >正文

深入浅出 16.1 例题(二叉树)P4715 P4913

淘汰赛 P4715

符合二叉树结构

输入叶子结点。叶子结点共2^n 个,则编号从2^n开始(完美二叉树每层起始编号=这层结点个数)。

for(inti=0;i<1<<n;i++){// 一共2^n个结点cin>>v[(1<<n)+i];// 树中编号从2^n开始,往后+1,存国家的能力值ans[(1<<n)+i]=i+1;// 国家编号1~2^n,和i相差1}

获胜的国家编号向上传递,记录在父结点的ans值中。
这个过程可以用递归来实现。

// 主函数中从编号为1的结点开始dfs(1);voiddfs(intx){// 传入的是树结点的编号if(x>=1<<n)return;// 叶子结点if(v[x*2]>v[x*2+1]){// 左儿子获胜v[x]=v[x*2];// 获取能力值,继续下一轮ans[x]=ans[x*2];// 继承传递,要的是初始国家的编号}else{// 右儿子胜利,同理v[x]=v[x*2+1];ans[x]=ans[x*2+1];}}

考虑输出
求亚军是哪个国家,最终是v[2]和v[3]进行比较,获胜的是冠军,另一个是亚军

cout<<(v[2]<v[3]?ans[2]:ans[3]);

最后,本道题开了两个数组,一个是v数组,记录国家能力值;另一个是ans数组,记录国家编号。那么数组要开多大呢?
结论:层数为h的数(由等比求和公式可知)共有2^h - 1个结点。
由题可知,叶子结点有2n个,说明树的高度h=n+1(对着图简单推导一下)。n最大是7,那么树高h最大为8,最多有28-1=256-1个结点,可取N=260(>=255)。

完整代码

#include<bits/stdc++.h>usingnamespacestd;// h = n + 1// h = 8// N = 2^8-1 = 256-1constintN=260;intv[N],ans[N];intn;voiddfs(intx){if(x>=1<<n)return;dfs(x*2);dfs(x*2+1);if(v[x*2]>v[x*2+1]){v[x]=v[x*2];ans[x]=ans[x*2];}else{v[x]=v[x*2+1];ans[x]=ans[x*2+1];}}intmain(){cin>>n;for(inti=0;i<1<<n;i++){cin>>v[(1<<n)+i];ans[(1<<n)+i]=i+1;}dfs(1);cout<<(v[2]<v[3]?ans[2]:ans[3]);return0;}

二叉树深度 P4913

之前我们使用一维数组存储二叉树,假设数深为h,我们需要开一个2^h大小的数组,空间复杂度太高。
由于每个结点最多只有两个儿子,所以可以对每个结点定义两个成员变量。
递归返回结点x的深度。

structNode{intleft,right;}a[N];

输入(树中结点编号注意从1开始存)

intn;cin>>n;for(inti=1;i<=n;i++)// 这里用0会出问题,因为题目中0代表空节点scanf("%d %d",&a[i].left,&a[i].right);

递归函数

// 主函数cout<<dfs(1);intdfs(intx){if(!x)return0;// 将叶子结点看作二叉树,深度为0// 左右子树最大深度+1returnmax(dfs(a[x].left),dfs(a[x].right))+1;}

完整代码

#include<bits/stdc++.h>usingnamespacestd;constintN=1000010;intn;structtree{intleft,right;}a[N];intdfs(intx){if(!x)return0;returnmax(dfs(a[x].left),dfs(a[x].right))+1;}intmain(){cin>>n;for(inti=1;i<=n;i++)scanf("%d %d",&a[i].left,&a[i].right);cout<<dfs(1);return0;}
http://www.jsqmd.com/news/711907/

相关文章:

  • 2026年香港留学推荐,学员满意度高的中介机构全面测评 - 速递信息
  • Linux入门】VMware安装CentOS 7超详细图文教程(附常见问题解决)
  • metaRTC8 成功适配 RTOS:开启 MCU/嵌入式实时音视频新时代
  • CUDA应用检查点技术:透明化GPU状态保存与恢复
  • 基于VirtualLab Fusion的微结构仿真设计与加工技术(光栅、超表面、蛾眼结构的仿真与加工技术)课程
  • 如何在雀魂对局中获得AI实时分析:Akagi麻将辅助工具完整指南
  • 多项式优化问题的低秩求解器技术比较与应用
  • 去年春季近2万人参与的AI春训营,正式启航!
  • 宜宾装修公司排行:本土与连锁品牌实力对比解析 - 优质品牌商家
  • 电脑清理与提速
  • 2026年新加坡留学机构全面测评,头部机构性价比高哪家更靠谱 - 速递信息
  • 网易云音乐FLAC无损音乐批量下载:3步轻松获取高品质音乐库
  • AgentFlocks:构建去中心化多智能体协作系统的开源框架实践
  • BP Doctor PRO智能手表评测:血压监测与健康管理
  • RISC-V验证新范式:Lyra框架的硬件加速与AI生成技术
  • 新加坡2026年新加坡留学机构哪家好?名校录取率高的全面对比分析 - 速递信息
  • 多模态深度搜索技术挑战与BrowseComp-V3基准解析
  • 电商推荐系统中多层注意力架构(MLA)的优化实践
  • 第14课:团队协作中的 Claude Code
  • 安卓11 12系统修改定制化_____修改 lk.img分区 实现自定义启动引导 去除强解bl锁后的开机英文提示
  • 基于LLM与OpenClaw的AI智能体架构实践:构建自动化学生助理
  • 基于VirtualLab Fusion的光学检测与精密成像(光学检测、精密成像、显微镜系统)课程
  • 魔兽争霸3终极兼容性增强工具:5分钟解决所有现代系统运行问题
  • 2026年链条翻转机专业厂商技术能力对比解析 - 优质品牌商家
  • Sunshine游戏串流完全指南:从零搭建到专业优化的实战教程
  • WSC混合并行计算架构与TCME通信优化解析
  • Unity移动端特效开发与优化实战指南
  • 基于Git与CI/CD的学术论文自动化评审工作流实践
  • LSTM时间序列预测:Keras实现与工业应用指南
  • WebArena:多模态AI代理在办公自动化中的实践