java - 删除树结构中没有特定子节点的节点

标签 java tree tree-structure

我有一个像这样的树结构:

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/

相关文章:

Java,二叉树删除方法

c# - CSharpTest.Net.Collections.BPlusTree RecentCache 错误?

javascript 树结构 - 遍历树结构并显示子项内计数属性的总和

java - 更新缓存 rxjava observables 数据(使用嵌套缓存!)

java - 根据条件忽略RequestBody值

java - 如何从大量的URL中提取数据?

MongoDB $graphLookup 获取子级所有级别的深层嵌套结果

java 。编译/执行 2 .java 1 包命令行

c++ - 如何组织 C++ 项目

grails - 此树结构的理想Grails类域是什么