数据库表结构
实现思路1、拿到有父子节点的集合数据
2、遍历集合数据,拿到所有的根节点
3、遍历根节点,拿到所有的子节点
4、递归子节点,将递归的子节点接上其父节点,直到子节点为空,递归完成
5、递归好后以集合形式返回,返回前端时以json格式转换后返回
具体代码1、造数据,和数据库表数据一致package com.lyq.generatetree; import com.alibaba.fastjson.json; import java.util.arraylist;import java.util.list; /** * @author : [liuyanqiang] * @version : [v1.0] * @classname : treemain * @description : [描述说明该类的功能] * @createtime : [2022/5/3 0:05] * @updateuser : [liuyanqiang] * @updatetime : [2022/5/3 0:05] * @updateremark : [描述说明本次修改内容] */public class treemain { public static void main(string[] args) { list<tree> list = new arraylist<>(); //造数据 list.add(new tree("22650", "0", "第一周")); list.add(new tree("22651", "22650", "1.1 随堂练习:《你认为以下属于人工智能的是什么呢?》,时间:0.5min")); list.add(new tree("22652", "22650", "1.2 主题讨论:《使用循环代码块绘制正五角星》,时间:5min")); list.add(new tree("22653", "22650", "1.3 主题讨论:《延时测试》,时间:0.5min")); list.add(new tree("22654", "22650", "1.4 调查问卷:《测试延时时间》, 时间:0.5min")); list.add(new tree("22655", "22650", "1.5 研究与挑战:翟文彪老师开播啦,时间:1min,[n]")); list.add(new tree("22656", "22650", "1.6 研究与挑战:米新江教授开播啦,时间:1min,[n]")); list.add(new tree("22657", "22656", "1.6.1 研究与挑战:丁中文老师开播啦,时间:1min,[n]")); list.add(new tree("22658", "22656", "1.6.2 研究与挑战:郝晓军老师开播啦,时间:1min,[n]")); list.add(new tree("22659", "22656", "1.6.3 研究与挑战:张娟老师开播啦,时间:1min,[n]")); list.add(new tree("22660", "22656", "1.6.4 研究与挑战:王怀军老师开播啦,时间:1min,[n]")); list.add(new tree("22661", "22656", "1.6.5 研究与挑战:何操老师开播啦,时间:1min,[n]")); list.add(new tree("22662", "22656", "1.6.6 研究与挑战:武新丽老师开播啦,时间:1min,[n]")); list.add(new tree("22663", "22656", "1.6.7 一键签到:人脸识别,时间:2min")); list.add(new tree("22664", "22656", "1.6.8 手势签到:人脸识别22,时间:2min")); list.add(new tree("22665", "22656", "1.6.9 研究与挑战:吴欣明老师开播啦,时间:1min,[n]")); list.add(new tree("22666", "22656", "1.6.10 研究与挑战:程艳艳老师开播啦,时间:1min,[n]")); list.add(new tree("22667", "22656", "1.6.11 研究与挑战:本学期课程内容,时间:0.5min")); list.add(new tree("22668", "22656", "1.6.12 研究与挑战:米老师的教学团队介绍,时间:0.3min")); list.add(new tree("22669", "22650", "1.7 研究与挑战:米老师的教学团队介绍,时间:0.3min")); list.add(new tree("22670", "22650", "1.8 研究与挑战:米老师的教学团队介绍,时间:0.3min")); list.add(new tree("22671", "22650", "1.9 研究与挑战:助教机器人提醒您参与活动,时间:2min")); list.add(new tree("22672", "22650", "1.10 研究与挑战:ar系统使用教程-学生端,时间:5min")); list.add(new tree("22673", "22672", "1.10.1 研究与挑战:不一样的课堂修改版,时间:0.5min")); list.add(new tree("22674", "22673", "1.10.1.1 研究与挑战:下载ar app,时间:8min")); list.add(new tree("22675", "22674", "1.10.1.1.1 研究与挑战:修改版手机端ar助教机器人的登录,时间:5min")); list.add(new tree("22676", "22674", "1.10.1.1.2 研究与挑战:app页面展示,时间:2min")); list.add(new tree("22677", "22674", "1.10.1.1.3 研究与挑战:使用网页版方式, 时间:3min")); list.add(new tree("22678", "22674", "1.10.1.1.4 研究与挑战:《使用学习通账号密码登录ar网页版》,时间:5min")); list.add(new tree("22679", "22674", "1.10.1.1.5 主题讨论:修改时间2022年4月4日《上传:进入ar网页版后的界面》,时间:3min")); list.add(new tree("22680", "22673", "1.10.1.2 研究与挑战:ar学生端教程视频,时间:2min")); list.add(new tree("22681", "22672", "1.10.2 研究与挑战:修改时间2022年4月4日温馨提示-钉钉,时间:0.3min")); list = new replacementtree().builtree(list); string jsonstring = json.tojsonstring(list); system.out.println(jsonstring); }}
2、树型结构实体类package com.lyq.generatetree; import java.util.arraylist;import java.util.list; /** * @author : [liuyanqiang] * @version : [v1.0] * @classname : replacementtree * @description : [树型结构装换] * @createtime : [2022/5/2 23:37] * @updateuser : [liuyanqiang] * @updatetime : [2022/5/2 23:37] * @updateremark : [描述说明本次修改内容] */public class replacementtree { /* * @version v1.0 * title: builtree * @author liuyanqiang * @description 始树形结构创建 * @createtime 2022/5/3 0:18 * @param [list] * @return java.util.list<com.lyq.generatetree.tree>*/ public list<tree> builtree(list<tree> list) { list<tree> treelist = new arraylist<>(); for (tree tree : this.getrootnode(list)) { //建立子树节点 tree = this.buildchiltree(tree,list); //为根节点设置子树节点 treelist.add(tree); } return treelist; } /* * @version v1.0 * title: buildchiltree * @author liuyanqiang * @description 通过递归来创建子树形结构 * @createtime 2022/5/3 0:18 * @param [tree, list] * @return com.lyq.generatetree.tree*/ private tree buildchiltree(tree tree,list<tree> list) { list<tree> treelist = new arraylist<>(); for (tree t : list) { //判断当前父节点是否存在子节点 if (t.getp_id().equals(tree.getid())) { treelist.add(this.buildchiltree(t,list)); } } tree.setchildren(treelist); return tree; } /* * @version v1.0 * title: getrootnode * @author liuyanqiang * @description 获取全部根节点 * @createtime 2022/5/3 0:18 * @param [list] * @return java.util.list<com.lyq.generatetree.tree>*/ private list<tree> getrootnode(list<tree> list) { list<tree> rootlist = new arraylist<>(); for (tree tree : list) { if (tree.getp_id().equals("0")) { rootlist.add(tree); } } return rootlist; }}
最后返回情况如下
以上就是java实现树形结构的代码示例的详细内容。