使用递归算法实现树结构

来源:互联网 发布:流星网络电视下载安装 编辑:程序博客网 时间:2024/06/05 20:19

新项目需要用到左侧菜单栏的遍历效果

所以自己研究写了一个递归实现树结构的工具类

后台正常查询数据集合,不过因为是树结构,必须要有关联关系的字段

代码注释中会写细节部分,如下:


/**
 * 递归实现树形工具类
 */
public class TreeUtils {
/**
* 构建树形模型
* data:查询到的集合,可以是实体类类型
*/
public static List<Menus> buildTreeModel(List<Menus> data) {
/* 返回的树形结构 */
List<Menus> returnTree = new ArrayList<Menus>();
for (Menus ms : data) {
/* 添加根节点,(默认0是根节点,可以根据自己需求设定) */
if (ms.getPid() == 0) {
returnTree.add(findAllChildren(ms, data));
}
}
return returnTree;
}


/**
* 根据跟节点查询子节点
* rootNode:根节点
* data:所有数据
*/
public static Menus findAllChildren(Menus rootNode, List<Menus> data) {
for (Menus children : data) {
/* 如果根节点的ID等于所有数据里节点的父ID */
if (rootNode.getId() == children.getPid()) {
/* 默认为空,先放空集合 */
if (rootNode.getChildren() == null) {
rootNode.setChildren(new ArrayList<Menus>());
}
/* 递归添加子节点 */
rootNode.getChildren().add(findAllChildren(children, data));
}
}
return rootNode;
}
}


Menus泛型为左侧菜单的集合,对应数据库中的表

表中必须要有id、name、pid主要字段(其余字段按个人需求加)

实体类里同样,但要多加一个List<Menus> children,来作为子节点添加

可以根据最后返回的结果用JSON测试下看看是不是树结构类型

阅读全文
0 0