leetcode 1110. Delete Nodes And Return Forest 删点成林 (中等)
![leetcode 1110. Delete Nodes And Return Forest 删点成林(中等)](https://static001.geekbang.org/infoq/b5/b50ea2c1f59159d0a4ce9fd5b352c324.webp)
一、题目大意
给出二叉树的根节点 root,树上每个节点都有一个不同的值。
如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。
返回森林中的每棵树。你可以按任意顺序组织答案。
示例 1:
![](https://static001.geekbang.org/infoq/76/7697faa9154991e4669c9692c8a12c38.png)
输入: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、各不相同的值。
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/delete-nodes-and-return-forest著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题思路
给一棵二叉树,每个节点值均不同,删除一些节点,由于删除非叶子节点会使原来的二叉树断开,从而会形成从棵二叉树,形成一片森林,返回森林中所有二叉树的根节点。
二叉树的题首先想到用递归,递归方法传递 4 个参数,当前节点;是否是根节点(如果是根节点、且存在左右子树才会形成新树);再传递一个 hashset 用来存储要删除的节点,达到常数据级搜索;还有一个保存结果的 list。
在递归函数中,如果节点为空返回 null,定义亦是 deleted 来保存当前节点值是否在 hashset 中,若是根节点且不需要被删除,则将节点加入返回结果 list 中。然后将左子节点赋值为对左子节点调用递归函数的返回值,右子节点赋值为对右子节点调用递归函数的返回值。最后判断当前节点是否被删除了,如果是的话返回空,否则返回当前指针。这样的话每棵树的根节点都在递归过程中存入结果 list 中了。
三、解题方法
3.1 Java 实现
四、总结小记
2022/9/14 工作接踵而至
版权声明: 本文为 InfoQ 作者【okokabcd】的原创文章。
原文链接:【http://xie.infoq.cn/article/aabe7197d436e37e568a3b0dc】。文章转载请联系作者。
评论