我有一个像这样的树结构:
public class Project {
private String id;
private String description;
private List<Project> subProjects;
private List<Document> documents;
}
List<Project> projects = new ArrayList<Project>;
项目可以有子项目或文档,但不能同时有。 我的问题是尝试通过从列表中删除没有文档的每个项目或子项目来过滤此列表。 因此,如果该项目没有文档且没有子项目,或者他的子项目都没有文档,那么我们会删除该项目。
可以递归地完成吗?
最佳答案
直接解释您的条件A.如果子项目和文档为空,则删除
或 B.所有子项目都没有文档
(假设“他的子项目都没有文档”意味着所有子项目,而不仅仅是直接子项目)
定义一个 boolean 函数通常有助于检查节点的状态,然后可以查询它来检查是否应该删除该节点
代码假设您将其放入 Project
中,如果不是,则需要将其作为参数传递
boolean isEmpty()
{
return subProjects.isEmpty() && documents.isEmpty();
}
boolean isChildrenEmpty()
{
//put before the recursion for speed
if(!documents.isEmpty()) //check if self has documents
return false;
for(Project child : subProjects)
if(!child.isChildrenEmpty()) //check if any child has documents
return false;
return true; //all children + self have no documents
}
boolean toRemove()
{
if(isEmpty()) //no children, no documents
return true;
for(Project child : subProjects)
if(!child.isChildrenEmpty()) //a child has a document
return false;
return true;
}
关于java - 删除树结构中没有特定子节点的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46832492/