以下是一个示例代码,用于根据组织ID获取组织树中的父集和子集,并将它们合并并返回:

import java.util.ArrayList;
import java.util.List;

class Organization {
    private int id;
    private int parentId;
    private List<Organization> children;

    public Organization(int id, int parentId) {
        this.id = id;
        this.parentId = parentId;
        children = new ArrayList<>();
    }

    public int getId() {
        return id;
    }

    public int getParentId() {
        return parentId;
    }

    public List<Organization> getChildren() {
        return children;
    }

    public void addChild(Organization child) {
        children.add(child);
    }
}

public class OrganizationTree {

    private Organization root;

    public OrganizationTree(Organization root) {
        this.root = root;
    }

    public List<Organization> getParents(int id) {
        List<Organization> parents = new ArrayList<>();
        Organization node = findNode(root, id);
        if (node == null) {
            return parents;
        }
        while (node.getParentId() != 0) {
            node = findNode(root, node.getParentId());
            if (node != null) {
                parents.add(node);
            }
        }
        return parents;
    }

    public List<Organization> getChildren(int id) {
        Organization node = findNode(root, id);
        if (node == null) {
            return new ArrayList<>();
        }
        return node.getChildren();
    }

    public List<Organization> getSubset(int id) {
        List<Organization> subset = new ArrayList<>();
        Organization node = findNode(root, id);
        if (node == null) {
            return subset;
        }
        subset.add(node);
        subset.addAll(node.getChildren());
        return subset;
    }

    public List<Organization> getFullSet(int id) {
        List<Organization> fullSet = new ArrayList<>();
        fullSet.addAll(getParents(id));
        fullSet.addAll(getSubset(id));
        return fullSet;
    }

    private Organization findNode(Organization node, int id) {
        if (node.getId() == id) {
            return node;
        }
        for (Organization child : node.getChildren()) {
            Organization result = findNode(child, id);
            if (result != null) {
                return result;
            }
        }
        return null;
    }
}

这个类中定义了一个 Organization 类,表示组织节点,它有一个 id 表示节点ID,一个 parentId 表示父节点ID,以及一个 children 列表表示它的子节点。

OrganizationTree 类表示整个组织树,它有一个 root 表示根节点。这个类提供了以下方法:

  • getParents(int id):根据节点ID获取它的所有父节点,返回一个 List<Organization>
  • getChildren(int id):根据节点ID获取它的所有子节点,返回一个 List<Organization>
  • getSubset(int id):根据节点ID获取它本身以及所有子节点,返回一个 List<Organization>
  • getFullSet(int id):根据节点ID获取它本身以及所有父节点和子节点,返回一个 List<Organization>

这些方法都是通过递归遍历整个树来实现的。对于每个节点,它会递归遍历它的子节点,直到找到目标节点。然后根据不同的需求,返回不同的结果。

java 根据某组织id获取组织树中它的父集和子集合并返回

原文地址: https://www.cveoy.top/t/topic/b1i0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录