使用递归算法结合数据库解析成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树形结构的代码解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!