【代码超详解】UVA 699 The Falling Leaves 下落的树叶

UVA699 下落的树叶 The Falling Leaves(二叉树的递归遍历建树) UVA699 下落的树叶 The Falling Leaves bool型的函数一定不能忘了组后要加上return 1;或者return 0;!!!! #include<bits/stdc++.h> using namespace std; #define debug(x) cout<<"# "<<x<<" "<<endl; type... 阅读详情

一、题目描述

有些地方原题说得不太清楚,我按照自己的语言说一遍。
输入是若干棵二叉树,先序遍历,权值代表从该点竖直落下的叶片数量,没有风将任何节点落下的叶片吹到其它地方去。每个节点的左子树比该节点的水平坐标减少一个单位,右子树比该节点的水平坐标增加一个单位,两个子树的垂直坐标比父节点减少一个单位。要求统计处在每个水平位置全部节点的权值之和(作为该处落下的叶片的总数)。如果一个节点的左子树或右子树不存在,对应的值为 -1 。如果子节点的位置已经存在别的节点,这个位置的值要累加。垂直坐标不会超过 80 个。每种情形输出以后要额外再空一行。根节点为 -1 时,输入结束。
复习先序遍历的递归定义:
PreOrder(N) = Root(N) + PreOrder(NL) + PreOrder(NR)
N、NL、NR 分别代表节点、左节点、右节点。从根节点开始,将其左节点和右节点继续套用此式展开,直到全部子树展开完毕为止。+ 运算符在这里是一种广义的运算符,可以代表字符串连接等运算。
如果仍然不理解,请根据下述说明一步一步在草稿纸上画出二叉树。
样例说明:
5 7 -1 6 -1 -1 3 -1 -1
根节点为 5 。5 的左子节点为 7 。7 的左子节点不存在,右子树为 6 。6 的左子树和右子树均不存在。此时根节点 5 的左子树输入完毕,开始输入其右子树。5 的右子节点的权为3,3的子节点不存在。整个二叉树输入完毕。其构造如下:

第一、二、三列的和分别为 7、11、3 ,所以输出:
Case 1:
7 11 3

8 2 9 -1 -1 6 5 -1 -1 12 -1
-1 3 7 -1 -1 -1
根节点为 8 ,8 的左节点为 2 ,2 的左节点为 9 ,9 的左右节点均不存在。2 的右节点为 6 ,6 的左节点为 5 ,5 的左右节点均不存在。6 的右节点为 12 ,12 无子节点。根节点 8 的左子树输入完毕,开始输入 8 的右子树。8 的右子节点为 3 ,3 的左子节点为 7 ,但该位置已经存在值 6 ,所以该位置的值改为 13 。7 也无左右节点。3 无右节点。二叉树输入完毕,其构造如下:

第一、二、三、四列的和分别为 9、7、21、15,输出:
Case 2:
9 7 21 15

二、算法分析说明与代码编写指导

采用递归输入,写成专门的建树函数读入每个数值,每次读入一个数值相当于读入一个节点,然后在函数内再调用该函数去读这个节点的左子树和右子树。如果读取到 -1 就直接返回,否则累加在该水平位置落下的树叶的数量。这样就可在主程序中只调用一次建树函数就能读入数值直到二叉树构造完毕。
因为最多有80列,所以可用一个数组 sum[81] 来统计每一列落下的叶片数量。初始位置从 40 开始,并用变量 L 和 R 分别记录整个二叉树到达的最左端与最右端的水平位置,变量 p 记为当前位置。输出只要输出 sum[L] 到 sum[R] 即可。注意对每一棵树输出对应结果以后要额外再空行,否则会判 Wrong Answer。
结束标记是只输入一个 -1 ,此时对应的和为零,可以依据 sum[40] == 0 的真假来判断输入结束。每次输入新的二叉树之前,需要清除原有的统计数据,并将位置标记 p、 L 和 R 恢复到初始状态。

三、AC 代码

本代码约 10 ms ,紫书上是代码不是完整的,在 优快云 上随机查找到一份补充完紫书原代码的

第39步 深度学习图像识别:Inception V3建模(Tensorflow) 阅读详情

相关推荐

从.bib到.bbl:手把手教你搞定LaTeX参考文献的完整流程

本文详细介绍了从.bib到.bbl的LaTeX参考文献处理完整流程,包括文献数据库构建、样式选择、主文档配置、编译流程及问题排查。特别针对.bib、.bbl等文件的操作提供了实战解决方案,帮助用户高效管理学术文献引用,适用于各类学术写作场景。

weixin_29292431的博客 285

STM32F103内部晶振配置实战:从代码修改到频率验证(附工程模板)

本文详细介绍了STM32F103内部晶振(HSI)的配置实战,从代码修改到频率验证的全流程,并附赠可直接使用的工程模板。通过对比HSI与外部晶振的优缺点,帮助开发者在成本敏感和空间受限的应用中实现稳定时钟配置,同时提供频率校准和常见问题排查方法。

weixin_29171087的博客 322

二、频率调制光谱(FMS)技术——error信号的数学模型及其他推论

一些推论。

qq_41111336的博客 1605

AutoSAR系列讲解(入门篇)2.1-AppL概述

该章主要是讲解SWC是如何在ECU中分布的

雪云飞星的博客 4万+

红绿灯背后的数学:如何用Java算出“黄金绿灯时间“?

本文探讨了城市交通信号灯配时优化的数学原理与Java实现方法。文章首先分析了信号灯配时不合理导致的交通问题,指出精确计算绿灯时长的重要性。核心内容包括:1)基于M/M/1排队模型建立车流量数学模型,通过优化算法最小化总等待时间;2)使用Java实现信号灯优化控制器,采用梯度下降法动态调整绿灯时长。文中提供了完整的Java代码实现,包括信号灯控制器基类和优化控制器类,采用原子类保证线程安全,并详细解释了关键算法原理和实现细节。该方案可为城市智能交通系统提供理论支持和技术实现参考。

墨夶的博客 1345

手把手教你学simulink(12.10)--设计和仿真一个用于控制飞机纵向运动(高度和速度)的多变量控制系统

飞机的纵向运动控制是航空工程中的一个重要问题,涉及飞机的高度和速度的精确控制。多变量控制系统可以同时控制多个飞行参数,确保飞机在最佳条件下运行。Simulink提供了一个强大的平台,用于建模、仿真和分析动态系统,非常适合设计和测试多变量控制系统。通过本项目的实施,我们成功设计和仿真了一个用于控制飞机纵向运动(高度和速度)的多变量控制系统。该项目展示了从系统建模、控制器设计、仿真验证到结果分析的完整流程,为多变量控制系统的设计提供了有价值的参考。

MHD0815的博客 598

在windows中安装并启动ActiveMQ5.16.2

打开ActiveMQ官网 下载ActiveMQ 点击apache-activemq-5.16.2-bin.zip进行下载 下载发后解压到c盘根目录下 在powershell中输入 ./activemq start启动 ActiveMQ服务 htpp://127.0.0.1:8161访问ActiveMQ控制台 ...

934

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: 大学物理 复习指导、公式推导精简过程、结论归纳 第九章 静电场
下一篇: 【代码超详解】UVA 297 Quadtrees 四分树
山上一缕烟
博客等级 码龄8年 269粉丝 498原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值