当前位置:网站首页>LeetCode814算题第15天二叉树系列值《814 二叉树剪枝》
LeetCode814算题第15天二叉树系列值《814 二叉树剪枝》
2022-08-11 03:42:00 【小机double】
LeetCode814 二叉树剪枝
剪枝:剪枝顾名思义就是对一棵树进行修修剪剪,现实中我们对树进行修剪的目的是为了让其更好看,而在程序中对二叉树进行操作也是如此的,在程序中所谓的“好看”即是可以减少算法的时间复杂度。剪枝好像在决策树,机器学习过度拟合等领域都有用到,但是我并不了解剪枝在真正场景中的使用,仅仅只是在做题的角度上有所了解(害)。
题目描述
给定二叉树根节点root,此外树的每个结点的值要么是 0,要么是 1.
返回移除所有不包含1的子树的原二叉树
节点x的子树包含节点x本身和所有x的后代
说明:
给定的二叉树最多有100个节点
每个节点的值只会为0或1
示例
输入:[1,null,0,0,1]
输出:[1,null,0,null,1]
图示:
说明:
只有红色那个0满足“所有子树节点不包含1”,另外一个0其右子树明显有个1,所以不用删除,要注意的是题目给出的规定是:节点x的子树包含节点x本身和所有x的后代
输入:[1,0,1,0,0,0,1]
输出:[1,null,1,null,1]
输入:[1,1,0,1,1,0,1,0]
输出:[1,1,0,1,1,null,1]
图示:
题目解析
由上面的示例可以看出,每个被删除的节点的值为0,并且其左右子树都为“空”,即是“叶子节点”。拿示例2来看,如果我们采用递归的方式进行删除,递归栈首先操作最后一个入栈的节点,即递归方式是自底向上进行操作的。这样当正式处理示例2中的第二节点0(从左往右算)时,其左右子树的两个0都已经被删除掉了,所以这个节点同样的也可以删除,重复这样的过程即可删除所有满足条件的节点。递归实现的代码很简洁,代码如下:
class Solution {
public TreeNode pruneTree(TreeNode root) {
if (root == null) {
return null;
}
root.left = pruneTree(root.left); // 获取对左子树剪枝后的新子树
root.right = pruneTree(root.right); //获取对右子树剪枝后的新子树
if (root.left == null && root.right == null && root.val == 0) {
//左右子树为空且值为0,要删除,返回null即可
return null;
}
return root;
}
}
程序运行结果:
注:虽然形式很简单,但是关键还是在于理解递归的运算过程。
更多题解请看原题:814.二叉树剪枝
边栏推荐
- Uni - app - access to Chinese characters, pinyin initials (according to the Chinese get pinyin initials)
- What kind of programming trading strategy types can be divided into?
- 互换性测量技术-几何误差
- STC8H development (15): GPIO drive Ci24R1 wireless module
- 【FPGA】day19-二进制转换为十进制(BCD码)
- Interchangeable Measurement Techniques - Geometric Errors
- QueryDet:级联稀疏query加速高分辨率下的小目标检测
- Day20 FPGA 】 【 - block the I2C read and write EEPROM
- Redis老了吗?Redis与Dragonfly性能比较
- Audio codec, using FAAC to implement AAC encoding
猜你喜欢
Interchangeable Measurement Techniques - Geometric Errors
轮转数组问题:如何实现数组“整体逆序,内部有序”?“三步转换法”妙转数组
The last update time of the tables queried by the two nodes of the rac standby database is inconsistent
Traversal of DOM tree-----modify styles, select elements, create and delete nodes
Rotary array problem: how to realize the array "overall reverse, internal orderly"?"Three-step conversion method" wonderful array
【C语言】入门
【愚公系列】2022年08月 Go教学课程 035-接口和继承和转换与空接口
【FPGA】SDRAM
Day20 FPGA 】 【 - block the I2C read and write EEPROM
常用认证机制
随机推荐
Audio codec, using FAAC to implement AAC encoding
互换性与测量技术——表面粗糙度选取和标注方法
[BX] and loop
Traversal of DOM tree-----modify styles, select elements, create and delete nodes
Enter the starting position, the ending position intercepts the linked list
es-head插件插入查询以及条件查询(五)
EasyCVR接入海康大华设备选择其它集群服务器时,通道ServerID错误该如何解决?
程序化交易与主观交易对盈利曲线的影响!
电力机柜数据监测RTU
互换性测量技术-几何误差
互换性与测量技术-公差原则与选用方法
图解LeetCode——640. 求解方程(难度:中等)
你不知道的 console.log 替代品
Kubernetes集群搭建Zabbix监控平台
一次简单的 JVM 调优,学会拿去写到简历里
【愚公系列】2022年08月 Go教学课程 036-类型断言
console.log alternatives you didn't know about
【FPGA】day18-ds18b20实现温度采集
[ADI low-power 2k code] Based on ADuCM4050, ADXL363, TMP75 acceleration, temperature detection and serial port printing, buzzer playing music (lone warrior)
Binary tree related code questions [more complete] C language