【刷题日记】814. 二叉树剪枝

简介: 本次刷题日记的第 80 篇,力扣题为:814. 二叉树剪枝

本次刷题日记的第 80 篇,力扣题为:814. 二叉树剪枝

一、题目描述:

今天来处理一个写一个二叉树剪枝的题目

image.png

二叉树剪枝,看上去感觉不是那么难,一起来撸一波

二、这道题考察了什么思想?你的思路是什么?

题目要求我们对二叉树进行剪枝,树的呈现方式是 根节点为 1,其余节点有 0 有 1,题目要求我们移除所有不包含 1 的子树

换句话说,就是要我们找到一个节点,它的左节点为空,右节点也为空,并且当前节点是 0 的情况,就将该节点移除

分析

上面有说到实际上我们就可以将问题转换成找那种左节点为空,右节点也为空,且自己的值是 0 的节点

那么如何将该节点移除呢?

此时遍历到这个节点的时候,就返回空就可以了,就相当于是移除了

根据这个逻辑,我们就是要先遍历当前节点的左节点,再遍历右节点,最后判断当前节点的值,显然是需要使用后序遍历的方式来进行处理

那么我们按照示例 2 的方式来进行推演一遍 ,看看咱们得出的结果几何

遍历方式是左右根,咱们先遍历左子树,当左子树遍历完毕之后,再遍历右子树,右子树遍历完毕之后,最后进行判断,对于每一个节点都是严格按照这个规则来进行处理

通过上图就能够很清晰的展示出,每一个节点的遍历情况,以及某些被移除节点的移除顺序

既然能够清晰的知道对于二叉树每一个节点的变动情况,那么对于我们编写代码来说就是一个简单翻译的过程的,有没有感觉很有趣?

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码

image.png

image.png

  • 编写代码的时候,我们需要注意,如果给出的 root 节点就是空的话,那么我们就直接返回 nil 即可
  • 我们采取的是后序遍历的方式,严格按照遍历规则来执行
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func pruneTree(root *TreeNode) *TreeNode {
    if root == nil {
        return nil
    }
    root.Left = pruneTree(root.Left)
    root.Right = pruneTree(root.Right)
    if root.Left == nil && root.Right == nil && root.Val == 0 {
        return nil
    }
    return root
}

四、总结:

image.png

本题按照我们这种方式来进行处理,对于每一个节点都需要遍历到,因此对于时间复杂度是 O(n)

空间复杂度最多是 O(n)

原题地址:814. 二叉树剪枝

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关文章
|
安全 项目管理
一文搞懂需求流程规范的制定方法和落地技巧
随着业务和产品的发展、团队的不断扩大,很多团队都不可避免的会遇到需求流程混乱的问题。虽然有的团队也编写了一些“需求流程规范”的文档,但最终却流于纸面,难以在团队真正落地。如何科学制定并有效落实需求管理规范呢?对此,云效产品经理陈逊进行了非常详细的直播分享,本文是他经验的文字总结。
103535 19
|
Kubernetes API 调度
21道题帮你轻松拿捏 Kubernetes 面试
21道题帮你轻松拿捏 Kubernetes 面试
|
5G 文件存储
5G-GUTI详解
5G-GUTI(5G Globally Unique Temporary Identifier)是5G系统中全局唯一的临时UE标识,目的是提供在5G系统(5GS)中不泄露UE或用户永久身份的UE明确标识,提升安全性。它被用于接入、AMF和网络识别中,可以使用它在5GS中网络和UE之间的信令期间建立UE的身份。
2069 0
5G-GUTI详解
|
9月前
|
索引
【HarmonyOS Next开发】日历组件详细日界面组件
原生UI没有提供日历相关的组件,于是手撸了详细页面的日程。一开始打算使用list加tab的方式来实现切换的效果,但是list的切换是没有办法确定当前展示的索引的,所以没有办法实现日历内容动态添加等效果。在业内大佬的指导下,使用了两个swiper组件分别实现周和日的切换,实现了想要的效果
218 6
【HarmonyOS Next开发】日历组件详细日界面组件
|
数据建模 Linux vr&ar
Linux下解压命令大全
Linux下解压命令大全
340 0
|
安全 Java Go
【Go语言专栏】Go语言中的加密与安全通信
【4月更文挑战第30天】本文介绍了Go语言中的加密与安全通信。通过使用golang.org/x/crypto/ssh/terminal库实现终端加密,以及golang.org/x/net/websocket库实现WebSocket安全通信。文章展示了安装库的命令、加密操作及WebSocket通信的示例代码。此外,还列举了安全通信在数据传输加密、用户认证、密码保护和文件加密等场景的应用。掌握这些知识对开发安全的Web应用至关重要。
202 0
|
数据采集 JSON 前端开发
从代码到内容:使用C#和Fizzler探索Instagram的深处
Instagram是一个流行的社交媒体平台,拥有数亿的用户和海量的图片和视频内容。如果您想要从Instagram上获取一些有用的信息或数据,您可能需要使用爬虫技术来自动化地抓取和分析网页内容。本文将介绍如何使用C#和Fizzler这两个强大的工具,来实现一个简单而高效的Instagram爬虫,从代码到内容,探索Instagram的深处。
178 1
|
人工智能 算法 ice
【2024美赛】D题(中英文):五大湖水资源问题Problem Problem D: Great Lakes Water Problem
【2024美赛】D题(中英文):五大湖水资源问题Problem Problem D: Great Lakes Water Problem
262 1
|
Kubernetes Linux 对象存储
Linux安装Minio
Linux安装Minio
882 0
|
关系型数据库 MySQL Unix
mysqld_safe: command not found 解决方法
mysqld_safe: command not found 解决方法
2457 0