sql
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);
RecursiveTest 递归实现
package recursive;
import me.shib.java.lib.utils.JsonUtil;
import java.util.List;
public class RecursiveTest {
public static void main(String[] args) {
JsonUtil jsonUtil = new JsonUtil();
RecursiveTest recursive = new RecursiveTest();
jsonUtil.toJson(recursive.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<TreeNode> childTreeNodes =personService.queryTreeNode(cid);
//遍历子节点
for (TreeNode child : childTreeNodes) {
TreeNode n = recursiveTree(child.getCid()); //递归
node.getNodes().add(n);
}
// return node;
return node;
}
}
树的结点类
package recursive;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class TreeNode implements Serializable {
private Integer cid;
private String cname;
private Integer pid;
private List nodes = new ArrayList();
public TreeNode() {
}
public Integer getCid() {
return cid;
}
public String getCname() {
return cname;
}
public Integer getPid() {
return pid;
}
public List getNodes() {
return nodes;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public void setCname(String cname) {
this.cname = cname;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public void setNodes(List nodes) {
this.nodes = nodes;
}
}