使用递归算法结合数据库解析成Java树形结构的代码解析

发布时间 - 2026-01-11 03:05:48    点击率:

1、准备表结构及对应的表数据

a、表结构:

create table TB_TREE
(
CID NUMBER not null,
CNAME VARCHAR2(50),
PID NUMBER //父节点
)

b、表数据:

insert into tb_tree (CID, CNAME, PID) values (1, '中国', 0);
insert into tb_tree (CID, CNAME, PID) values (2, '北京市', 1);
insert into tb_tree (CID, CNAME, PID) values (3, '广东省', 1);
insert into tb_tree (CID, CNAME, PID) values (4, '上海市', 1);
insert into tb_tree (CID, CNAME, PID) values (5, '广州市', 3);
insert into tb_tree (CID, CNAME, PID) values (6, '深圳市', 3);
insert into tb_tree (CID, CNAME, PID) values (7, '海珠区', 5);
insert into tb_tree (CID, CNAME, PID) values (8, '天河区', 5);
insert into tb_tree (CID, CNAME, PID) values (9, '福田区', 6);
insert into tb_tree (CID, CNAME, PID) values (10, '南山区', 6);
insert into tb_tree (CID, CNAME, PID) values (11, '密云县', 2);
insert into tb_tree (CID, CNAME, PID) values (12, '浦东', 4);

2、TreeNode对象,对应tb_tree

public class TreeNode implements Serializable {
private Integer cid;
private String cname;
private Integer pid;
private List nodes = new ArrayList();
public TreeNode() {
}
//getter、setter省略
}

3、测试数据

public class TreeNodeTest {
@Test
public void loadTree() throws Exception{
System.out.println(JsonUtils.javaToJson(recursiveTree(1)));
}
/**
* 递归算法解析成树形结构
*
* @param cid
* @return
* @author jiqinlin
*/
public TreeNode recursiveTree(int cid) {
//根据cid获取节点对象(SELECT * FROM tb_tree t WHERE t.cid=?)
TreeNode node = personService.getreeNode(cid);
//查询cid下的所有子节点(SELECT * FROM tb_tree t WHERE t.pid=?)
List childTreeNodes = personService.queryTreeNode(cid); 
//遍历子节点
for(TreeNode child : childTreeNodes){
TreeNode n = recursiveTree(child.getCid()); //递归
node.getNodes().add(n);
}
return node;
}
}

输出的json格式如下:

{
  "cid": 1,
  "nodes": [
    {
      "cid": 2,
      "nodes": [
        {
          "cid": 11,
          "nodes": [
          ],
          "cname": "密云县",
          "pid": 2
        }
      ],
      "cname": "北京市",
      "pid": 1
    },
    {
      "cid": 3,
      "nodes": [
        {
          "cid": 5,
          "nodes": [
            {
              "cid": 7,
              "nodes": [
              ],
              "cname": "海珠区",
              "pid": 5
            },
            {
              "cid": 8,
              "nodes": [
              ],
              "cname": "天河区",
              "pid": 5
            }
          ],
          "cname": "广州市",
          "pid": 3
        },
        {
          "cid": 6,
          "nodes": [
            {
              "cid": 9,
              "nodes": [
              ],
              "cname": "福田区",
              "pid": 6
            },
            {
              "cid": 10,
              "nodes": [
              ],
              "cname": "南山区",
              "pid": 6
            }
          ],
          "cname": "深圳市",
          "pid": 3
        }
      ],
      "cname": "广东省",
      "pid": 1
    },
    {
      "cid": 4,
      "nodes": [
        {
          "cid": 12,
          "nodes": [
          ],
          "cname": "浦东",
          "pid": 4
        }
      ],
      "cname": "上海市",
      "pid": 1
    }
  ],
  "cname": "中国",
  "pid": 0
}

总结

以上所述是小编给大家介绍的使用递归算法结合数据库解析成Java树形结构的代码解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# 递归算法  # java树形结构  # Java递归遍历树形结构的实现代码  # 使用递归删除树形结构的所有子节点(java和mysql实现)  # Java创建树形结构算法实例代码  # java实现省市区转换成树形结构  # Java实现树形结构的示例代码  # Java数据封装树形结构代码实例  # java转树形结构工具类详解  # 详解Java递归实现树形结构的两种方式  # Java接口返回省市区树形结构的实现  # 递归  # 密云县  # 福田  # 上海市  # 广东省  # 广州市  # 北京市  # 深圳市  # 小编  # 中国  # 南山  # 在此  # 遍历  # 给大家  # 所述  # 给我留言  # 感谢大家  # 疑问请  # 有任何  # 测试数据 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何创建自定义Artisan命令?(代码示例)  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  个人摄影网站制作流程,摄影爱好者都去什么网站?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  如何在万网主机上快速搭建网站?  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  如何在不使用负向后查找的情况下匹配特定条件前的换行符  怎么用AI帮你设计一套个性化的手机App图标?  如何批量查询域名的建站时间记录?  如何撰写建站申请书?关键要点有哪些?  太平洋网站制作公司,网络用语太平洋是什么意思?  免费视频制作网站,更新又快又好的免费电影网站?  如何快速生成高效建站系统源代码?  黑客入侵网站服务器的常见手法有哪些?  再谈Python中的字符串与字符编码(推荐)  网站制作大概多少钱一个,做一个平台网站大概多少钱?  免费网站制作appp,免费制作app哪个平台好?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  微信小程序 wx.uploadFile无法上传解决办法  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  原生JS实现图片轮播切换效果  利用JavaScript实现拖拽改变元素大小  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  使用C语言编写圣诞表白程序  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  如何在IIS中配置站点IP、端口及主机头?  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  Laravel如何自定义错误页面(404, 500)?(代码示例)  Laravel怎么为数据库表字段添加索引以优化查询  如何用西部建站助手快速创建专业网站?  LinuxCD持续部署教程_自动发布与回滚机制  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  C++时间戳转换成日期时间的步骤和示例代码  Laravel API资源类怎么用_Laravel API Resource数据转换  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  5种Android数据存储方式汇总  如何挑选高效建站主机与优质域名?  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  如何用IIS7快速搭建并优化网站站点?  Java遍历集合的三种方式  网站建设要注意的标准 促进网站用户好感度!  如何快速生成ASP一键建站模板并优化安全性?  如何快速搭建虚拟主机网站?新手必看指南  Laravel如何实现数据库事务?(DB Facade示例)  如何获取上海专业网站定制建站电话?  详解jQuery中基本的动画方法  python中快速进行多个字符替换的方法小结  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】