算法十二、list转tree

一道感觉不太像算法题的题

先讲下思路

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;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容