xmanman

导航

 
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;

public class TreeNode {
    private Integer id;
    private Integer pid;
    private String name;
    private  List<TreeNode> children;

    public TreeNode() {
    }

    public TreeNode(Integer id, Integer pid, String name) {
        this.id = id;
        this.pid = pid;
        this.name = name;
    }

    public TreeNode(Integer id, Integer pid, String name, List<TreeNode> children) {
        this.id = id;
        this.pid = pid;
        this.name = name;
        this.children = children;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getPid() {
        return pid;
    }

    public void setPid(Integer pid) {
        this.pid = pid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<TreeNode> getChildren() {
        return children;
    }

    public void setChildren(List<TreeNode> children) {
        this.children = children;
    }

    // 定义转换方法1
    public static List<TreeNode> listGetTree(List<TreeNode> list){
        List<TreeNode> treelist = new ArrayList<>();
        for(TreeNode treeNode:list){
            // 找到各个父根,直接插入到treeList中,作为初始节点s
            if(treeNode.getPid() == 0){
                treelist.add(treeNode);
            }
            // 找到子
            for(TreeNode treeNode1:list){
                if(treeNode1.getPid() == treeNode.getId()){
                    if(treeNode.getChildren() ==null){
                        treeNode.setChildren(new ArrayList<TreeNode>());
                    }
                    treeNode.getChildren().add(treeNode1);
                }
            }

        }
        return treelist;
    }

    // 方法二,先找最父级节点,然后递归找子
    public static List<TreeNode> listToTreeByRecursion(List<TreeNode> list){
        // 先找到最初的父节点
        List<TreeNode> treeNodeList = new ArrayList<>();
        for(TreeNode treeNode: list){
            if(treeNode.getPid() == 0){
                treeNodeList.add(findChildren(treeNode, list));
            }
        }
        return treeNodeList;
    }
    public static TreeNode findChildren(TreeNode treeNode, List<TreeNode> list){
        // 根据父节点去递归找子
        for(TreeNode treeNode1: list){
            if(treeNode1.getId() == treeNode.getPid()){
                if(treeNode.getChildren()==null){
                    treeNode.setChildren(new ArrayList<TreeNode>());
                    treeNode.getChildren().add(findChildren(treeNode1, list));
                }
            }
        }
        return treeNode;
    }







    public static void main(String[] args) {
        List<TreeNode> list = new ArrayList<TreeNode>();
        list.add(new TreeNode(1,0,"1"));
        list.add(new TreeNode(2,1,"2"));
        list.add(new TreeNode(3,2,"3"));

        list.add(new TreeNode(11,0,"11"));
        list.add(new TreeNode(21,11,"21"));
        list.add(new TreeNode(31,21,"31"));




        // 方法一
        List<TreeNode> treelist = new ArrayList<TreeNode>();
        treelist = listGetTree(list);
        // 方式二
        System.out.println("方式一:" + JSON.toJSON(treelist));
        List<TreeNode> treelist1 = new ArrayList<TreeNode>();
        treelist1 = listToTreeByRecursion(list);
        System.out.println("方式二:" + JSON.toJSON(treelist1));

    }

}

 

posted on 2020-11-25 16:20  xmanman  阅读(821)  评论(0)    收藏  举报