数据结构和算法

java 实现平层数组转换为层级对象

2018-08-08  本文已影响5人  奔跑的蛙牛

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;
    }
}

上一篇 下一篇

猜你喜欢

热点阅读