day16-二叉树最大最小深度

文章讨论了在树遍历中,递归方法在处理前序遍历时可能遇到的复杂性,指出递归后序遍历和层序遍历在实现上更优。作者认为对于理解和实现来说,后序和层序遍历的方法相比前序遍历有其独特优点。

今天的题目内容,递归前序遍历,是真的真的不好用

递归后序,层序挺好了

题目描述 题目背景:小L和小H在玩一个rpg游戏,不幸的是,小H在魔法森林里迷路了,小L要赶紧把小H救出来! 魔法森林的地图是一棵二叉树,小H现在在某个叶子节点处,而小L在根节点,要找到小H,小L需要把整棵树遍历一次,但是魔法森林里危机重重,小L必须发动魔法来减少危险程度 题目描述: 小L的魔法可以改变魔法森林的地图,具体而言,小L可以把以这棵二叉树中某个节点为根的子树转接到二叉树中某个叶子节点的下方,但只能发动一次 小L想请你告诉他,发动魔法之后,最多可以把二叉树深度减小到多少 小L是很聪明的,如果任何一种转接子树的方法均不能减小深度,那么小L就不会发动魔法 注意,如果去掉了当前子树后,原二叉树没有其他的叶子节点,则不允许移动该子树 子树定义为原二叉树中某节点及其所有后代保持原有亲子关系的一棵树 二叉树深度定义为所有叶子节点的深度最大值,根节点的深度为1 Hint:若删除子树ls[i],剩余部分的最深叶子节点可以分两个部分求取:子树rs[i]中的叶子和删掉子树i后剩余部分的叶子,如果从根节点往下求这个值,则后面这一项是可以递推的。rs同理,若没有rs,会出现什么额外情况? 输入格式 第一行的输入 n n 表示二叉树的节点个数 接下来 n n 行,每行输入 2 2 个数,第 i i 行的数分别表示节点 i i 的左右儿子,若没有左/右儿子,则对应的数为0 输出格式 输出一个数字,表示发动魔法后,新的二叉树可以达到的最小深度 如果任何转接方式均不能减小深度,输出原二叉树深度 保证节点1为根节点,数据范围 对于100%的测试点: 1 ≤ n ≤ 1 0 6 1≤n≤10 6 时空磁盘限制(运行时) 时间限制:1000 ms 内存空间限制:244 MiB 磁盘空间限制:244 MiB 文件数量限制:无限制 单个测试点时空限制详情 完成任务,使用C++
04-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值