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 - 搜索一个java框架来简单地创建一个数据库web管理工具

data-structures - 理解二叉树上迭代后序遍历实现的逻辑

c - XML 是否存在任何二进制替代方案

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

java - 显示在java中执行了BFS遍历的图的树结构

java - JVM 数组可以被 realloc() 吗?

java - JTable 中的日期排序无效

java - 在方法调用之前中断阻塞方法

php - 如何在 php 中构建具有 id、parent_id 和深度变量的树

java - 一般树的后序遍历