专题二:二叉树的深度搜索(二叉树剪枝)

以leetcode814题为例

题目分析:

也就是当你的子树全为0的时候就可以剪掉

算法原理分析:

首先分析问题,你子树全为0的时候才可以干掉,我们可以设递归到某一层的时候如何处理

然后抽象出三个核心问题

也就是假设我们递归到第2层,左边那个0;

你要知道这个0能不能删掉,是不是要知道左子树是否全为0,右子树是否全为0

接着递归左子树一直到叶子结点,知道是叶子节点就不必要返回了

因为叶子结点的左结点是nullptr,右节点也是返回nullptr,所以叶子判断叶子能不能删除就在它的val,如果val等于0,那这个叶子就可以删掉(delete,然后在nullptr让上一层连接起来是空,或者直接返回null,但这样会造成内存泄漏),如果等于1,就返回上层这个结点,让其连接起来

所有的结点都是接受左子树的返回值,右子树的返回值,然后判断自己的val

所以可以抽象出来dfs:dfs就是给你一个结点,返回它删除完所有的子树全为0的新结点

注意要返回之后要连接起来,你没有连接起来就是有问题

代码编写:

相关推荐
闪电悠米15 分钟前
力扣hot100-73.矩阵置零-标记数组详解
算法·leetcode·矩阵
栋***t20 分钟前
从“纸质试卷”到“AI智能组卷”,麦塔在线考试系统如何重构出题逻辑?
java·大数据·人工智能·算法·重构
wabs66622 分钟前
关于图论【卡码网100.最大岛屿的面积的思考】
数据结构·算法·图论
CHANG_THE_WORLD29 分钟前
深入理解递归:从函数调用到调用栈的完整执行过程
java·开发语言·算法
一拳一个呆瓜1 小时前
【STL】iostream 编程:使用提取运算符
c++·stl
我不是懒洋洋2 小时前
从零实现一个分布式日志平台:ELK的核心设计
c++
geovindu2 小时前
go:Backtracking Algorithm
开发语言·后端·算法·golang·回溯算法
神仙别闹2 小时前
基于QT(C++)实现Windows 自启动项查看和分析
c++·windows·qt
微露清风2 小时前
模拟算法学习记录
学习·算法
KaMeidebaby3 小时前
卡梅德生物技术快报 | abcore 纳米抗体文库:从PNAS论文看纳米抗体理性设计:构象熵作为亲和力预测新指标的技术实现
java·开发语言·人工智能·算法·机器学习