package com.lzk;
import java.util.List;
public class TreeNode {
private String id;
private String name;
private String pid;
private List<TreeNode> childrens;
public TreeNode(String id,String name,String pid){
this.id = id;
this.name = name;
this.pid = pid;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public List<TreeNode> getChildrens() {
return childrens;
}
public void setChildrens(List<TreeNode> childrens) {
this.childrens = childrens;
}
@Override
public String toString() {
return "TreeNode{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", pid='" + pid + '\'' +
", childrens=" + childrens +
'}';
}
}
package com.lzk;
import java.util.ArrayList;
import java.util.List;
public class TreeBuild {
/**
* 方式一:使用两层循环实现
* @param treeList
* @return
*/
public static List<TreeNode> toTree01(List<TreeNode> treeList,String pid) {
List<TreeNode> retList = new ArrayList<TreeNode>();
for (TreeNode parent : treeList) {
if (pid.equals(parent.getPid())) {
retList.add(parent);
}
for (TreeNode child : treeList) {
if (child.getPid() == parent.getId()) {
if (parent.getChildrens() == null) {
parent.setChildrens(new ArrayList<TreeNode>());
}
parent.getChildrens().add(child);
}
}
}
return retList;
}
/**
* 方式二:使用递归实现
* @param treeList
* @return
**/
public static List<TreeNode> toTree02(List<TreeNode> treeList,String pid) {
List<TreeNode> retList = new ArrayList<TreeNode>();
for (TreeNode parent : treeList) {
if (pid.equals(parent.getPid())) {
retList.add(findChildren(parent, treeList));
}
}
return retList;
}
/*
* 查询父节点下的所有子节点
* */
private static TreeNode findChildren(TreeNode parent, List<TreeNode> treeList) {
for (TreeNode child : treeList) {
if (parent.getId().equals(child.getPid())) {
if (parent.getChildrens() == null) {
parent.setChildrens(new ArrayList<TreeNode>());
}
parent.getChildrens().add(findChildren(child, treeList));
}
}
return parent;
}
/**
*方法三
* @param list
* @return
*/
public static List<TreeNode> toTree03(List<TreeNode> list,String pid) {
List<TreeNode> treeList = new ArrayList<TreeNode>();
for (TreeNode tree : list) {
if(tree.getPid().equals(pid)){
treeList.add(tree);
}
}
for (TreeNode tree : list) {
toTreeChildren(treeList,tree);
}
return treeList;
}
public static void toTreeChildren(List<TreeNode> treeList, TreeNode tree) {
for (TreeNode node : treeList) {
if(tree.getPid() == node.getId()){
if(node.getChildrens() == null){
node.setChildrens(new ArrayList<TreeNode>());
}
node.getChildrens().add(tree);
}
if(node.getChildrens() != null){
toTreeChildren(node.getChildrens(),tree);
}
}
}
}
package com.lzk;
import java.util.ArrayList;
import java.util.List;
public class test {
public static void main(String[] args) {
List<TreeNode> list = new ArrayList<TreeNode>();
list.add(new TreeNode("1", "顶层节点1", "0"));
list.add(new TreeNode("2", "顶层节点2", "0"));
list.add(new TreeNode("3", "顶层节点3", "0"));
list.add(new TreeNode("4", "二级节点4", "1"));
list.add(new TreeNode("5", "二级节点5", "2"));
list.add(new TreeNode("6", "二级节点6", "3"));
list.add(new TreeNode("7", "三级节点7", "4"));
list.add(new TreeNode("8", "三级节点8", "4"));
list.add(new TreeNode("9", "三级节点9", "5"));
// List<TreeNode> list1 = TreeBuild.toTree02(list,"0");
// System.out.println(list1);
List<TreeNode> list2 = TreeBuild.toTree03(list,"0");
System.out.println(list2);
}
}