给出二叉树的根节点 root,树上每个节点都有一个不同的值。

如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。

返回森林中的每棵树。你可以按任意顺序组织答案。

示例:

输入:root = [1,2,3,4,5,6,7], to_delete = [3,5]
输出:[[1,2,null,4],[6],[7]]

提示:

  • 树中的节点数最大为 1000
  • 每个节点都有一个介于 11000 之间的值,且各不相同。
  • to_delete.length <= 1000
  • to_delete 包含一些从 11000、各不相同的值。

解题思路

对于树的问题,我们一般首先思考递归解法,对于递归解法我们首先思考边界条件。对于这个问题,我们观察一下最后留下的森林,实际上在存储的时候我们保存的这些树的根节点。那么什么样的根节点需要保留呢?父亲节点被删除自己没有被删除

要注意的是,虽然我们知道了最后保留哪些节点,但是我们还有一个操作需要完成,那就是删除节点的操作。这个使用递归非常简单,边界条件是当root == None的时候我们返回None即可,否则的话,我们的root->left=f(root->left);root->right=f(root->right),其中f函数就是我们的删除节点操作函数。

最后代码也非常简洁

class Solution:def delNodes(self, root: TreeNode, to_delete: List[int]) -> List[TreeNode]:res = list()to_delete = set(to_delete)def preOrder(root, n_root):if root:if root.val not in to_delete and n_root:res.append(root)root.left = preOrder(root.left, root.val in to_delete)root.right = preOrder(root.right, root.val in to_delete)return None if root.val in to_delete else rootpreOrder(root, True)return res

我将该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!

Leetcode 1110:删点成林(超详细的解法!!!)相关推荐

  1. Leetcode 1110.删点成林(Delete Nodes And Return Forest)

    Leetcode 1110.删点成林 1 题目描述(Leetcode题目链接)   给出二叉树的根节点 root,树上每个节点都有一个不同的值. 如果节点值在 to_delete 中出现,我们就把该节 ...

  2. Leetcode 1162:地图分析(超详细的解法!!!)

    你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了.其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗 ...

  3. LeetCode 1110. 删点成林(二叉树递归)

    1. 题目 给出二叉树的根节点 root,树上每个节点都有一个不同的值. 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合). 返回森林中 ...

  4. leetCode 1110 删点成林(树,后序遍历)

    题目链接:点击查看 题目描述: 给定一个整数二叉树和一些整数,求删掉这些整数对应的节点后,剩余的子树. 输入输出: 输入:root = [1,2,3,4,5,6,7], to_delete = [3, ...

  5. leetcode 1110. 删点成林

    题目描述: 给出二叉树的根节点 root,树上每个节点都有一个不同的值. 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合). 返回森林中 ...

  6. LeetCode 1110.删点成林

    主页有其他数据结构内容(持续更新中) 难度:Medium 代码: /*** Definition for a binary tree node.* struct TreeNode {* int val ...

  7. LeetCode 刷题系列 -- 1110. 删点成林

    给出二叉树的根节点 root,树上每个节点都有一个不同的值. 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合). 返回森林中的每棵树.你 ...

  8. Leetcode 37:解数独(超详细的解法!!!)

    编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x3 ...

  9. leetcode 111.删点成林 C++

    leetcode 111.删点成林 C++ 删点成林 题目描述 示例 提示 解题思路 C++代码 注意事项 删点成林 题目描述 给出二叉树的根节点 root,树上每个节点都有一个不同的值. 如果节点值 ...

  10. PigyChan_LeetCode 1110. 删点成林

    1110. 删点成林 难度中等 给出二叉树的根节点 root,树上每个节点都有一个不同的值. 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的 ...

最新文章

  1. 关于使用JAVA中JDK安装和在命令行中编译和运行程序的一些总结
  2. HTML5 details 标签
  3. svn命令行使用说明
  4. 无线数传电台工业控制的应用
  5. 人类一败涂地做图教程_绘画步骤_人类一败涂地鼠绘人物步骤与技巧_3DM单机
  6. Chrome浏览器获取XPATH的方法----通过开发者工具获取
  7. 大数据学习笔记21:MR案例——分区全排序
  8. oracle12c正在检查环境变量,oracle11g安装客户端检查先决条件失败
  9. SpringBoot+AOP构建多数据源的切换实践
  10. mysql查询不超过19_mysql45讲 19.为什么我只查一行的语句,也执行这么慢?
  11. MyEclipse添加Mybatis generator插件
  12. chmod 777命令_Linux shell命令总结
  13. Mysql查询性能优化
  14. Arduino Uno - 控制4位8段共阴极数码管 显示数字
  15. RADIUS协议解析
  16. ImportError: cannot import name ‘export_saved_model‘ from ‘tensorflow.python.keras.saving.saved_mode
  17. 大学生php实训总结_php实训报告.doc
  18. 无线路由器DNS服务器解析,路由器DNS劫持简单实现和防范分析
  19. java 构造方法 继承_java-继承/构造方法?
  20. Query Planning(查询方案)(搜索一)

热门文章

  1. 断电后,台式计算机无法启动,练习台式机电脑停电后开不了机怎么办呢?
  2. android 即时战略游戏,即时战略手游排行榜前十名 即时战略游戏推荐
  3. Python——检查 JSON 字符串格式错误的位置
  4. 网络配置出错导致不能上网,如何重新启用以太网?
  5. feet在c语言中是什么意思,feet是什么意思-foot的含义、短语等出发
  6. 计算机科学与技术本科人才培养方案评审意见,人才培养方案评审意见
  7. 端午节论屈原之离骚和程序开发之离怨
  8. java三角形梯形和圆形类_JAVA----第六周(实现对三角形、梯形、圆形的封装)
  9. 如何在不同链部署地址完全相同的合约
  10. Beyond MapReduce:谈2011年风靡的数据流计算系统