
814 二叉树剪枝(利用递归调用返回的结果来删除节点)
检查当前节点是否为叶子节点:如果是叶子节点,检查其值。如果是0,则移除该子树;如果是1,则保留。 递归处理左、右子树:如果当前节点不是叶子节点,递归处理左子树和右子树。如果左子树被移除,设置左子树为null;同样处理右子树。 决定当前节点是否保留:根据左、右子树的返回值和当前节点的值,决定是否保留当前节点。如果当前节点为0,且左、右子树都被移除,则当前节点也被移除。 TreeNode类:定义了二叉树的节点结构,每个节点有一个值,以及左、右子节点。 delete方法:使用递归来判断是否需要移除当前节点及其子树。返回布尔值表示是否移除了该子树。 pruneTree方法:调用delete方法,并根据返回值处理根节点。如果根节点被移除,返回None,否则返回根节点。
发布日期:2021-05-07 21:55:27
浏览次数:21
分类:精选文章
本文共 1420 字,大约阅读时间需要 4 分钟。
对于这个问题,我们需要移除所有不包含1的子树。我们可以使用递归的方法来解决这个问题。递归的思路是从叶子节点开始,逐层向上判断每个节点是否需要保留。具体步骤如下:
以下是代码实现:
class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = rightclass Solution: def delete(self, root: TreeNode): if not root: return True is_leaf = not root.left and not root.right if is_leaf: return root.val == 0 left_deleted = self.delete(root.left) right_deleted = self.delete(root.right) if left_deleted: root.left = None if right_deleted: root.right = None # Determine if current node should be deleted if root.val == 0 and left_deleted and right_deleted: return True return False def pruneTree(self, root: TreeNode) -> TreeNode: if not self.delete(root): return None return root
代码解释
- 检查是否为叶子节点:如果是叶子节点,返回值是否为0。
- 递归处理左、右子树:处理左子树和右子树,根据返回值决定是否将左、右子树设为null。
- 判断当前节点是否保留:如果当前节点为0且左右子树都被移除,则当前节点也被移除。
这种方法确保了每个节点都被正确处理,移除了所有不包含1的子树,符合题目要求。
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年03月22日 10时26分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【ASP.NET】ASP.NET中权限验证使用OnAuthorization实现
2019-03-05
第9章 用户自己建立数据类型
2019-03-05
02、MySQL—数据库基本操作
2019-03-05
RedHat Linux-配置YUM仓库
2019-03-05
Redis数据类型
2019-03-05
OpenJDK1.8.0 源码解析————HashMap的实现(一)
2019-03-05
MySQL-时区导致的时间前后端不一致
2019-03-05
2021-04-05阅读小笔记:局部性原理
2019-03-05
将Java编译为本地代码
2019-03-05
go语言简单介绍,增强了解
2019-03-05
2.1 Kubernetes--Pod
2019-03-05
python file文件操作--内置对象open
2019-03-05
ERP/MIS开发 LLBL Gen多表操作
2019-03-05
Remove function
2019-03-05
在没实践机会的前提下,如何跨越级别
2019-03-05
从面试官角度告诉大家如何准备项目方面的描述
2019-03-05
架构师入门:搭建基本的Eureka架构(从项目里抽取)
2019-03-05
Java核心技术及面试指南 流程控制方面的面试题答案
2019-03-05