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

以leetcode814题为例

题目分析:

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

算法原理分析:

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

然后抽象出三个核心问题

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

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

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

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

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

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

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

代码编写:

相关推荐
凡人叶枫15 分钟前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
power 雀儿21 分钟前
掩码(Mask)机制 结合 多头自注意力函数
算法
会叫的恐龙25 分钟前
C++ 核心知识点汇总(第六日)(字符串)
c++·算法·字符串
小糯米60136 分钟前
C++顺序表和vector
开发语言·c++·算法
独望漫天星辰1 小时前
C++ 多态深度解析:从语法规则到底层实现(附实战验证代码)
开发语言·c++
We་ct1 小时前
LeetCode 56. 合并区间:区间重叠问题的核心解法与代码解析
前端·算法·leetcode·typescript
Lionel6891 小时前
分步实现 Flutter 鸿蒙轮播图核心功能(搜索框 + 指示灯)
算法·图搜索算法
小妖6661 小时前
js 实现快速排序算法
数据结构·算法·排序算法
xsyaaaan1 小时前
代码随想录Day30动态规划:背包问题二维_背包问题一维_416分割等和子集
算法·动态规划
王老师青少年编程2 小时前
2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)
c++·题解·真题·csp·信奥赛·csp-s·提高组