题目
给出二叉树的根节点 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.成家之后哪里还有工夫陪朋友,太理想了。成家之后照顾好自己的家就行了。
除了家人,不再可能是有说走就走的旅行了