> 文章列表 > 算法----删点成林

算法----删点成林

算法----删点成林

题目

给出二叉树的根节点 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、各不相同的值。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/delete-nodes-and-return-forest
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解决思路

后续遍历,即左右根

解决方法

    fun delNodes(root: TreeNode?, to_delete: IntArray): List<TreeNode?> {//dfs查找节点 如果有孩子节点 把自己移除掉 放入孩子节点 以此类推var result = ArrayList<TreeNode>()dfs(root,to_delete,result)return result}fun dfs(root: TreeNode?, to_delete: IntArray, result: MutableList<TreeNode>) {if (root == null) {return}if (root.`val` in to_delete) {if (root.left != null && root.left!!.`val` !in to_delete) {result.add(root.left)}if (root.right != null && root.right!!.`val` !in to_delete) {result.add(root.right)}}delNodes(root.left, to_delete)delNodes(root.right, to_delete)if ((root.left?.`val` ?: -1) in to_delete) {root.left = null}if ((root.right?.`val` ?: -1) in to_delete) {root.right = null}}

总结

1.过去的就不要再怀念。恋旧没有什么不好,但是也没有什么好的。
日子总要往前走,往前看。

2.成家之后哪里还有工夫陪朋友,太理想了。成家之后照顾好自己的家就行了。
除了家人,不再可能是有说走就走的旅行了