importcom.alibaba.fastjson.JSON;importjava.util.ArrayList;importjava.util.List;public classTreeNode {privateInteger id;privateInteger pid;privateString name;private Listchildren;publicTreeNode() {
}publicTreeNode(Integer id, Integer pid, String name) {this.id =id;this.pid =pid;this.name =name;
}public TreeNode(Integer id, Integer pid, String name, Listchildren) {this.id =id;this.pid =pid;this.name =name;this.children =children;
}publicInteger getId() {returnid;
}public voidsetId(Integer id) {this.id =id;
}publicInteger getPid() {returnpid;
}public voidsetPid(Integer pid) {this.pid =pid;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}public ListgetChildren() {returnchildren;
}public void setChildren(Listchildren) {this.children =children;
}//定义转换方法1
public static List listGetTree(Listlist){
List 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.getChildren().add(treeNode1);
}
}
}returntreelist;
}//方法二,先找最父级节点,然后递归找子
public static List listToTreeByRecursion(Listlist){//先找到最初的父节点
List treeNodeList = new ArrayList<>();for(TreeNode treeNode: list){if(treeNode.getPid() == 0){
treeNodeList.add(findChildren(treeNode, list));
}
}returntreeNodeList;
}public static TreeNode findChildren(TreeNode treeNode, Listlist){//根据父节点去递归找子
for(TreeNode treeNode1: list){if(treeNode1.getId() ==treeNode.getPid()){if(treeNode.getChildren()==null){
treeNode.setChildren(new ArrayList());
treeNode.getChildren().add(findChildren(treeNode1, list));
}
}
}returntreeNode;
}public static voidmain(String[] args) {
List list = new ArrayList();
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 treelist = new ArrayList();
treelist=listGetTree(list);//方式二
System.out.println("方式一:" +JSON.toJSON(treelist));
List treelist1 = new ArrayList();
treelist1=listToTreeByRecursion(list);
System.out.println("方式二:" +JSON.toJSON(treelist1));
}
}