欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

递归构建树状结构

发布时间:2023/12/29 编程问答 34 豆豆
生活随笔 收集整理的这篇文章主要介绍了 递归构建树状结构 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

构建树状结构Demo所需数据库脚本:
数据库脚本

数据结构如下:

核心逻辑代码如下:

@Service public class AreaServiceImpl extends ServiceImpl<AreaMapper, TArea> implements AreaService {@Autowiredprivate AreaMapper dao;@Overridepublic List<TArea> tree() {QueryWrapper<TArea> queryWrapper = Wrappers.query();// 查询所有节点List<TArea> nodes = dao.selectList(queryWrapper);// 生成树结构List<TArea> tree = buildTree(nodes);return tree;}private List<TArea> buildTree(List<TArea> nodes) {List<TArea> tree = new ArrayList<TArea>();for (TArea node : nodes) {if (node.getParentId() == 0) {// 根节点tree.add(node);build(node, nodes);// 递归}}return tree;}/*** 递归,构建树状结构* @param node* @param nodes*/private void build(TArea node, List<TArea> nodes) {List<TArea> children = getChildren(node, nodes);if (!children.isEmpty()) {node.setChildren(children);for (TArea child : children) {build(child, nodes);}}}/*** 构建子级数据* @param node* @param nodes* @return*/private List<TArea> getChildren(TArea node, List<TArea> nodes) {List<TArea> children = new ArrayList<TArea>();for (TArea org : nodes) {Long pId = org.getParentId();if (node.getId().equals(pId)) {children.add(org);}}return children;}}

测试结果如下:

前端采用Vue-Ztree-2.0实现:

Demo代码(包含前后端)

总结

以上是生活随笔为你收集整理的递归构建树状结构的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。