java 根据某组织id获取组织树中它的父集和子集合并返回
以下是一个示例代码,用于根据组织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>。
这些方法都是通过递归遍历整个树来实现的。对于每个节点,它会递归遍历它的子节点,直到找到目标节点。然后根据不同的需求,返回不同的结果。
原文地址: https://www.cveoy.top/t/topic/b1i0 著作权归作者所有。请勿转载和采集!