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

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

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

示例 1:

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

输出:[[1,2,null,4],[6],[7]]

示例 2:

输入:root = [1,2,4,null,3], to_delete = [3]

输出:[[1,2,4]]

提示:

  • 树中的节点数最大为 1000。

  • 每个节点都有一个介于 1 到 1000 之间的值,且各不相同。

  • to_delete.length <= 1000

  • to_delete 包含一些从 1 到 1000、各不相同的值。

1110. 删点成林 - 力扣(Leetcode)

思路:

本题是后续遍历,自底向上处理。在处理完当前节点的左右节点后,再处理当前节点。
对于当前节点的处理:若是当前节点在删除名单中,若是当前节点的左子节点或者右子节点不为空,那么将左子节点或者右子节点压入结果中,并返回空指针(意味着当前节点被删除);否则返回当前节点

java:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {List<TreeNode> result = new LinkedList<>();public List<TreeNode> delNodes(TreeNode root, int[] to_delete) {HashSet<Integer> set = new HashSet<>();for(int dd:to_delete) {set.add(dd);}TreeNode newRoot = dfsNodes(root, set);if(newRoot != null) {result.add(newRoot);}return result;}TreeNode  dfsNodes(TreeNode root, HashSet<Integer> set) {if(root == null) {return null;}root.left = dfsNodes(root.left, set);root.right = dfsNodes(root.right, set);if(set.contains(root.val)) {if(root.left != null) {result.add(root.left);}if(root.right != null) {result.add(root.right);}return null;}return root;}}

LeetCode 刷题系列 -- 1110. 删点成林相关推荐

  1. LeetCode刷题系列

    LeetCode 我们工作面试和提高自身数据结构和算法能力的时候往往需要刷刷题,我选择LeetCode是通过一个留学论坛了解的.专业,覆盖语种全面. 提前说说刷题的心得: 尽量手写代码,少使用IDE的 ...

  2. Leetcode刷题系列(一)——巧解数学问题

    文章目录 1.引言 2.最大公约数与最小公倍数 2.1最大公约数 2.2最小公倍数 3.筛法和打表 4.进制转换 5.角度问题(1rad=180°/π) 6.同余定理 7.容斥原理 8.距离度量公式 ...

  3. Leetcode刷题系列汇总

    文章目录 一.前言 二.分治 && 归并 三.BFS 四.DFS & 回溯 五.动态规划 六.贪心算法 七.二叉树 7.1 中序遍历 SQL 一.前言 ~~~~~~       ...

  4. LeetCode 刷题系列(前缀和题目)之 974. 和可被 K 整除的子数组

    题目: 给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的(连续.非空) 子数组 的数目. 子数组 是数组的 连续 部分. 示例 1: 输入:nums = [4,5,0,- ...

  5. LeetCode刷题系列-- 174. 地下城游戏

    一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. 骑士的初始 ...

  6. leetcode刷题(三)——容斥原理

    leetcode刷题系列三.这一节的内容主要是容斥原理的题目和题解. 百度百科上容斥原理的解释: 在计数时,必须注意没有重复,没有遗漏.为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法 ...

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

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

  8. 卷进大厂系列之LeetCode刷题笔记:二分查找(简单)

    LeetCode刷题笔记:二分查找(简单) 学算法,刷力扣,加油卷,进大厂! 题目描述 涉及算法 题目解答 学算法,刷力扣,加油卷,进大厂! 题目描述 力扣题目链接 给定一个 n 个元素有序的(升序) ...

  9. LeetCode刷题2

    0612 LeetCode刷题2 力扣刷题1 力扣刷题2 力扣83题:删除排序链表中的重复元素 力扣82题:删除排序链表中的重复元素II 力扣第8题:字符串转换整数 (atoi) 力扣22题:括号生成 ...

最新文章

  1. python获取系统时间月份_python 取数组绝对值python获取当前日期
  2. 模式识别,计算机视觉,计算机图形学,智能控制,信号处理,语音识别,知识处理,机器学习,数据挖掘领域区别
  3. jstat的小伙伴:找出system.gc的调用的小工具
  4. 配置Tomcat的日志系统
  5. linux消息总线日志,linux – 解密继续mpt2sas系统日志消息
  6. XGBoost实战与调参优化
  7. python的django框架http请求_python django框架(一)
  8. 诗歌rails之获取本地ip地址
  9. RabbitMQ消息队列集群
  10. app采集的10个经典方法
  11. appscan10.0下载
  12. CBoard项目学习
  13. 无法打开xlsx文件_什么是XLSX文件(以及如何打开一个文件)?
  14. 微信平台自动获取Token
  15. 研究生跟了一个很棒的导师是种怎样的体验?
  16. 猫、路由器和交换机的区别和联系
  17. k8s停止服务_Kubernetes 优雅停止Pod
  18. Mac设置命令行代理
  19. 我的五大开仓点与五大平仓点 开仓点
  20. 华为手机怎么找回计算机功能,华为手机怎么在电脑上显示

热门文章

  1. 有5瓶药,每个药丸重10克,只有一瓶受到污染的药丸重量发生了变化,每个药丸重9克。给你一个天平,你怎样一次就能测出哪一瓶是受到污染的药呢?
  2. 一个水分子的质量大约为3.0*10-23g,1夸脱水 大约有950g。编写一个程序,要求输入水的夸脱数, 然后显示这么多水中包含多少个水分子。
  3. Excel内查找大于某值单元格个数,不使用条件格式
  4. 安卓截取视频第一帧的方法
  5. 【UV打印机】墨路之过滤器
  6. 中柏7s装linux,墙裂推荐中柏新品平板EZpad 7和EZpad 7s
  7. 平面设计中常用的6种排版构图方式广州协众信息
  8. FineWord试用,闪退、报警等bug问题解决
  9. 【华为OD机试真题 Python】单行道汽车通行时间
  10. 心血来潮买了服务器_每个开发人员心血来潮的17个聪明的API