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

以leetcode814题为例

题目分析:

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

算法原理分析:

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

然后抽象出三个核心问题

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

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

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

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

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

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

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

代码编写:

相关推荐
思麟呀10 小时前
Linux的基础IO流
linux·运维·服务器·开发语言·c++
星释10 小时前
Rust 练习册 :Pythagorean Triplet与数学算法
开发语言·算法·rust
星释10 小时前
Rust 练习册 :Nth Prime与素数算法
开发语言·算法·rust
多喝开水少熬夜11 小时前
Trie树相关算法题java实现
java·开发语言·算法
QT 小鲜肉11 小时前
【QT/C++】Qt定时器QTimer类的实现方法详解(超详细)
开发语言·数据库·c++·笔记·qt·学习
WBluuue11 小时前
数据结构与算法:树上倍增与LCA
数据结构·c++·算法
bruk_spp12 小时前
牛客网华为在线编程题
算法
呆瑜nuage12 小时前
C++之红黑树
c++
亮剑201813 小时前
第2节:程序逻辑与控制流——让程序“思考”
开发语言·c++·人工智能
敲代码的瓦龙13 小时前
操作系统?进程!!!
linux·c++·操作系统