Java无限级树(递归)超实用案例
简介
无限级树即为树形结构,每个节点都可以拥有多个子节点,并且每个子节点都可以继续拥有多个子节点,即“无限级”;递归则以特定的方式循环重复调用函数,以实现某种算法的目的。本案例通过将递归运用到无限级树上,实现了一个非常实用的树形结构数据处理方法。
实现思路
在Java中实现无限级树的情况下,我们可以通过创建一个树节点类,其中包含节点id、父节点id、子节点列表等属性;同时还可以使用递归方法在树中遍历需要的节点,实现树的各种属性设置、查询、展示等功能。
具体而言,实现无限级树需要先定义一个树节点对象:
class TreeNode {
private Long id;
private String name;
private Long parentId;
private List<TreeNode> children;
//getter and setter
}
在定义完树节点后,我们就可以使用递归方法来构建一棵无限级树,示例代码如下:
public class TreeUtil {
/**
* 递归构建无限级树方法
* @param nodeList 所有节点列表
* @param parentId 父节点id
* @return 封装好的父子节点树
*/
public List<TreeNode> buildTree(List<TreeNode> nodeList, Long parentId) {
List<TreeNode> tree = new ArrayList<>();
for (TreeNode node : nodeList) {
Long id = node.getId();
Long pid = node.getParentId();
if (parentId.equals(pid)) {
//使用递归方法构建子节点树
List<TreeNode> children = buildTree(nodeList, id);
node.setChildren(children);
tree.add(node);
}
}
return tree;
}
}
在上述代码中,我们首先定义了一个buildTree方法,通过传入所有节点列表和父节点id来构建树结构。在方法内部,首先定义一个tree变量,表示包含父子节点的树,接着对所有节点列表进行遍历,如果当前节点的父节点id和传入的parentId相同,则将该节点加入tree中,并对其子节点继续进行递归调用,直到所有节点遍历完毕。最后返回tree,就可以得到一棵完整的无限级树了。
示例说明
下面以两个具体的示例来说明如何使用无限级树:
示例1:菜单树
假设我们有以下的菜单列表:
List<TreeNode> menuList = new ArrayList<>();
menuList.add(new TreeNode(1L, "用户管理", null));
menuList.add(new TreeNode(2L, "新增用户", 1L));
menuList.add(new TreeNode(3L, "编辑用户", 1L));
menuList.add(new TreeNode(4L, "查询用户", 1L));
menuList.add(new TreeNode(5L, "角色管理", null));
menuList.add(new TreeNode(6L, "新增角色", 5L));
menuList.add(new TreeNode(7L, "编辑角色", 5L));
menuList.add(new TreeNode(8L, "查询角色", 5L));
我们的目标是构建一棵菜单树,其中每一个菜单节点下面可以包含多个子菜单。我们可以使用以下代码来构建菜单树:
TreeUtil treeUtil = new TreeUtil();
List<TreeNode> menuTree = treeUtil.buildTree(menuList, null);
在上述代码中,我们首先创建了一个TreeUtil对象,然后将菜单列表和null值作为参数传入buildTree方法中,就可以得到一个包含所有菜单的菜单树了。
示例2:分类树
假设我们有以下的分类列表:
List<TreeNode> categoryList = new ArrayList<>();
categoryList.add(new TreeNode(1L, "电子产品", null));
categoryList.add(new TreeNode(2L, "手机", 1L));
categoryList.add(new TreeNode(3L, "平板电脑", 1L));
categoryList.add(new TreeNode(4L, "家具家居", null));
categoryList.add(new TreeNode(5L, "桌子", 4L));
categoryList.add(new TreeNode(6L, "椅子", 4L));
categoryList.add(new TreeNode(7L, "沙发", 4L));
我们的目标是构建一棵分类树,其中每一个分类节点下面可以包含多个子分类。我们可以使用以下代码来构建分类树:
TreeUtil treeUtil = new TreeUtil();
List<TreeNode> categoryTree = treeUtil.buildTree(categoryList, null);
在上述代码中,我们同样使用TreeUtil对象和null值作为参数传入buildTree方法中,就可以得到一个包含所有分类的分类树了。
结语
本文介绍了无限级树和递归的原理以及它们在Java中如何实现,以及通过两个具体的示例分别展示了如何使用无限级树来构建菜单树和分类树。希望这篇文章能够对你有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java无限级树(递归)超实用案例 - Python技术站