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

以leetcode814题为例

题目分析:

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

算法原理分析:

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

然后抽象出三个核心问题

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

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

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

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

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

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

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

代码编写:

相关推荐
怎么没有名字注册了啊12 小时前
求一个矩阵中的鞍点
数据结构·算法
Greedy Alg12 小时前
LeetCode 74. 搜索二维矩阵
算法
小猪咪piggy12 小时前
【算法】day7 滑动窗口+二分查找
算法
仟千意12 小时前
数据结构:二叉树
数据结构·算法
会开花的二叉树13 小时前
C++微服务 UserServer 设计与实现
开发语言·c++·微服务
一水鉴天13 小时前
整体设计 逻辑系统程序 之34七层网络的中台架构设计及链路对应讨论(含 CFR 规则与理 / 事代理界定)
人工智能·算法·公共逻辑
DuHz13 小时前
C程序中的数组与指针共生关系
linux·c语言·开发语言·嵌入式硬件·算法
而后笑面对13 小时前
力扣2025.10.19每日一题
算法·leetcode·职场和发展
我星期八休息13 小时前
C++智能指针全面解析:原理、使用场景与最佳实践
java·大数据·开发语言·jvm·c++·人工智能·python
·白小白13 小时前
力扣(LeetCode) ——11.盛水最多的容器(C++)
c++·算法·leetcode