多层树遍历实现

3 月,跳不动了?>>> hot3.png

场景

         工作中组织架构存储多层,比如部门、处室、办公室等。当点击一个父节点时,需要展示该节点,以及挂载到该节点下的所有后代节点的数据。这时候就需要根据一个节点找出他的所有的后代节点。就是需要根据一个父节点遍历所有子节点。

实现方式

         这种层级树遍历一般都需要使用递归调用。

        首先需要判定当前这个节点有没有后代节点,如果有则进行遍历。获取下一层节点。

如果没有:则遍历结束。如果有子节点,则需要继续遍历子节点。

代码实现:

/**

*功能:获取直接子节点

*/

private List getChild(String pid) throws Exception{

        List voList = this.queryListByPid(pid);

        List idList = new ArrayList();

        if(voList!=null){

                 for(int i=0,max=voList.size();i<max;i++){

                     AddressCatalogVO vo = (AddressCatalogVO)voList.get(i);

                     idList.add(vo.getId());

                 }

        }

        return idList;

    }

        //使用递归遍历所有后代子节点

         public List getAllChildern(String pid) throws Exception{

                   List childList = getChild(pid);

                  if(childList!=null&&childList.size>0){ 

                          for(int i=0;i<childList.size();i++){

                                String childId = (String) childList.get(i);

                                     List tempList = getAllChildern(childId);

                                     if(tempList!=null){

                                         childList.addAll(tempList);

                                     }

                            }

                }

                   return childList;

         }

 

您好!您的问题需要明确一些细节。首先,您是否已经有了一个已经存储了所有实体的列表?其次,您的结构是什么样子的?是基于父子关系的结构还是基于多级关系的结构?在回答您的问题之前,需要了解这些信息。 假设您已经有一个存储了所有实体的列表,并且您的结构是基于父子关系的结构。那么,您可以按照以下步骤来实现: 1. 创建一个HashMap对象,用于存储每个实体的ID和对应的实体对象。 2. 遍历实体列表,将每个实体对象存储到HashMap中,以便在后续操作中可以快速地访问它们。 3. 遍历实体列表,为每个实体对象设置其父节点和子节点。具体来说,可以使用双重for循环,对每个实体对象进行遍历,查找其父节点和子节点,并将它们设置到实体对象的对应属性中。 4. 创建一个List对象,用于存储根节点对象。遍历HashMap中的所有实体对象,对每个实体对象进行如下操作: a. 如果该实体对象没有父节点,将其设置为根节点对象,并将其添加到List中。 b. 如果该实体对象有父节点,将其添加到父节点的子节点列表中。 5. 返回List对象,即为拼多层。 代码示例: ``` public static List<Entity> buildMultiLevelTree(List<Entity> entityList) { // 创建HashMap对象,用于存储每个实体的ID和对应的实体对象 Map<Long, Entity> entityMap = new HashMap<>(); for (Entity entity : entityList) { entityMap.put(entity.getId(), entity); } // 遍历实体列表,为每个实体对象设置其父节点和子节点 for (Entity entity : entityList) { Long parentId = entity.getParentId(); if (parentId != null) { Entity parent = entityMap.get(parentId); if (parent != null) { parent.addChild(entity); entity.setParent(parent); } } } // 创建List对象,用于存储根节点对象 List<Entity> rootList = new ArrayList<>(); for (Entity entity : entityList) { if (entity.getParent() == null) { rootList.add(entity); } } return rootList; } ``` 请注意,这只是一个简单的示例代码,具体的实现可能需要根据您的具体需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值