java中的递归算法(java 递归数据库生成 树形结构问题

1java中的递归算法、准备表结构及对应的表数据

java中的递归算法(java 递归数据库生成 树形结构问题

a、表结构:

java中的递归算法(java 递归数据库生成 树形结构问题

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

}