使用递归算法结合数据库解析成Java树形结构的代码解析
1、准备表结构及对应的表数据
a、表结构:
createtableTB_TREE ( CIDNUMBERnotnull, CNAMEVARCHAR2(50), PIDNUMBER//父节点 )
b、表数据:
insertintotb_tree(CID,CNAME,PID)values(1,'中国',0); insertintotb_tree(CID,CNAME,PID)values(2,'北京市',1); insertintotb_tree(CID,CNAME,PID)values(3,'广东省',1); insertintotb_tree(CID,CNAME,PID)values(4,'上海市',1); insertintotb_tree(CID,CNAME,PID)values(5,'广州市',3); insertintotb_tree(CID,CNAME,PID)values(6,'深圳市',3); insertintotb_tree(CID,CNAME,PID)values(7,'海珠区',5); insertintotb_tree(CID,CNAME,PID)values(8,'天河区',5); insertintotb_tree(CID,CNAME,PID)values(9,'福田区',6); insertintotb_tree(CID,CNAME,PID)values(10,'南山区',6); insertintotb_tree(CID,CNAME,PID)values(11,'密云县',2); insertintotb_tree(CID,CNAME,PID)values(12,'浦东',4);
2、TreeNode对象,对应tb_tree
publicclassTreeNodeimplementsSerializable{
privateIntegercid;
privateStringcname;
privateIntegerpid;
privateListnodes=newArrayList();
publicTreeNode(){
}
//getter、setter省略
}
3、测试数据
publicclassTreeNodeTest{
@Test
publicvoidloadTree()throwsException{
System.out.println(JsonUtils.javaToJson(recursiveTree(1)));
}
/**
*递归算法解析成树形结构
*
*@paramcid
*@return
*@authorjiqinlin
*/
publicTreeNoderecursiveTree(intcid){
//根据cid获取节点对象(SELECT*FROMtb_treetWHEREt.cid=?)
TreeNodenode=personService.getreeNode(cid);
//查询cid下的所有子节点(SELECT*FROMtb_treetWHEREt.pid=?)
ListchildTreeNodes=personService.queryTreeNode(cid);
//遍历子节点
for(TreeNodechild:childTreeNodes){
TreeNoden=recursiveTree(child.getCid());//递归
node.getNodes().add(n);
}
returnnode;
}
}
输出的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树形结构的代码解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!