一道感觉不太像算法题的题
先讲下思路
1.递归的方式,把所有的父子节点找出然后组装好
/**
* 递归遍历节点
* @param sourceList
* @param parentCode
* @return
*/
public List<Office> findChildrenList(List<Office> sourceList, String parentCode) {
List<Office> treeList = new ArrayList<>();
//获取到所有parentCode的子节点
for(Office item:sourceList) {
if (parentCode.equals(item.getParentCode())) {
treeList.add(item);
//递归遍历该子节点的子节点列表
item.setChildList(this.findChildrenList(sourceList,item.getOfficeCode()));
}
}
return treeList;
}
2.各种for,把数据塞到list中,然后循环遍历,把list中引用的对象的子节点挨个塞进去即可
/**
* 部门列表数据转换成树结构
* 一次性把所有根节点获取到,然后再获取
*
* @param list
* @param parentCode
* @return
*/
public List<Office> convertTree(List<Office> list, String parentCode) {
List<Office> trees = new ArrayList<>();
for (Office item : list) {
//获取到根节点
if (parentCode.equals(item.getParentCode())) {
trees.add(item);
}
//遍历获取所有节点下的子节点数据,去除子节点列表中的重复数据
for (Office it : list) {
if (it.getParentCode().equals(item.getId())) {
if (item.getChildList() == null) {
item.setChildList(new ArrayList<Office>());
}
boolean isPut = true;
for (Office childItem : item.getChildList()) {
if (it.getOfficeCode().equals(childItem.getOfficeCode())) {
isPut = false;
}
}
if (isPut) {
item.getChildList().add(it);
}
}
}
}
return trees;
}