当前位置: 首页 > news >正文

[100天算法】-二叉树剪枝(day 48)

题目描述

给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。返回移除了所有不包含 1 的子树的原二叉树。( 节点 X 的子树为 X 本身,以及所有 X 的后代。)示例1:
输入: [1,null,0,0,1]
输出: [1,null,0,null,1]示例2:
输入: [1,0,1,0,0,0,1]
输出: [1,null,1,null,1]示例3:
输入: [1,1,0,1,1,0,1,0]
输出: [1,1,0,1,1,null,1]说明:给定的二叉树最多有 100 个节点。
每个节点的值只会为 0 或 1 。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-pruning
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

用【产品经理法】的思维来解决递归问题。

产品

假设我们已经有了一个 pruneTree 方法,可以把一棵树中不包含 1 的枝节删掉。

子问题

明显是 pruneTree(root.left) 和 pruneTree(root.right)

大小问题的关系

首先,对于 root,我们用 pruneTree(root.left) 和 pruneTree(root.right) 的结果分别替换掉原本的 root.left 和 root.right。接着,再决定当前这棵树要不要保留。

  • 如果此时左右子树有一个不为空的话,那说明这棵树是要保留的,直接返回 root 就行。
  • 如果左右子树都为空,那我们就判断 root.val 的值,等于 1 就返回 root,等于 0 就返回 null 把这棵树移除。

递归出口

空节点直接返回 null 就行。

代码

TypeScript Code

/*** Definition for a binary tree node.* class TreeNode {*     val: number*     left: TreeNode | null*     right: TreeNode | null*     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {*         this.val = (val===undefined ? 0 : val)*         this.left = (left===undefined ? null : left)*         this.right = (right===undefined ? null : right)*     }* }*/function pruneTree(root: TreeNode | null): TreeNode | null {if (!root) return null;root.left = pruneTree(root.left);root.right = pruneTree(root.right);return root.left || root.right || root.val === 1 ? root : null;
}

复杂度分析

  • 时间复杂度:$O(N)$,N 为二叉树节点数。
  • 空间复杂度:$O(H)$,H 为二叉树的高度,递归栈的最大空间。
http://www.lryc.cn/news/214381.html

相关文章:

  • 常用编程语言排行与应用场景汇总(2023.10)
  • 基于 MySQL 多通道主主复制的机房容灾方案
  • 视频汇聚平台EasyCVR分发的流如何进行token鉴权?具体步骤是什么?
  • B-5:网络安全事件响应
  • 第17期 | GPTSecurity周报
  • 透视俄乌网络战之五:俄乌网络战的总结
  • 深度学习之基于Pytorch卷积神经网络的图像分类系统
  • 外观专利怎么申请?申请外观专利需要的资料有哪些?
  • 【Amazon】跨AWS账号资源授权存取访问
  • 探索C++中的不变之美:const与构造函数的深度剖析
  • DDoS类型攻击对企业造成的危害
  • 深入理解JVM虚拟机第十五篇:虚拟机栈常见异常以及如何设置虚拟机栈的大小
  • Rocketmq5延时消息最大时间
  • uniapp @click点击事件在新版chrome浏览器点击没反应
  • beanDefinition读取器
  • linux 上flink单机安装详解
  • 数据链路层中存在的报文ip,arp,rarp
  • 【Tricks】PC端微信输入时,文本出现右对齐情况怎么恢复
  • python使用requests+excel进行接口自动化测试
  • Android NDK开发详解之调试和性能分析的ndk-gdb
  • html获取网络数据,列表展示 一
  • 配置管理工具-Confd
  • 0基础学习PyFlink——使用DataStream进行字数统计
  • OpenCV官方教程中文版 —— 图像去噪
  • AcWing 102. 最佳牛围栏(前缀和+二分+DP)
  • React-表单受控绑定和获取Dom元素
  • python hashlib模块及实例
  • 垃圾回收GC
  • kubernetes-service微服务
  • 让你笑到不行的笑话短视频接口,快来试试!