回答(4)
2 years ago
我建议你尝试以下方法:
方法 boolean removeRecursively(String id, Set leavesToKeep) 将从具有给定 id 的节点遍历到此分支离开 .
首先,我们检查一下是不是一个叶子 . 如果叶子不在 leavesToKeep 集合中,我们将其删除并返回 true ,否则返回 false . 这是我们递归的基本情况 .
如果节点不是叶子,那么我们这样做:
children.removeIf(n -> removeRecursively(n.id, leavesToKeep));
removeIf是一种方便的Java 8方法,用于删除满足给定谓词的所有元素 . 这意味着只有在删除了所有子项时,才会从列表中删除子项 . 因此,如果 children.removeIf 调用 children 列表为空,我们应该使 removeRecursively 返回true:
if (children.isEmpty()) {
tree.remove(id);
return true;
} else return false;
完整方法可能如下所示:
public static boolean removeRecursively(Map> tree, String id, Set leavesToKeep) {