前段时间做项目,遇到了一个将Tree型结构的数据转换成一条条的数据。
首先,肯定是用List集合来接收数据,其次,既然是Tree型结构的数据,肯定是类似于找路径了哈。
最后,是利用递归,从根节点开始查找,先查找到节点的最后一个子节点,然后数据从最后一个子节点开始往添加。
//-------------实体类-----------------
package com.iodn.util;
import java.util.List;
public class Node {
private String name;
private List<Node> list;
public Node(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Node> getList() {
return list;
}
public void setList(List<Node> list) {
this.list = list;
}
}
//--------------------Tree拆分成List的算法
package com.iodn.util;
import java.util.ArrayList;
import java.util.List;
public class TreeToList {
/**
*/
public static void main(String[] args) {
TreeToList t = new TreeToList();
Node root = t.getNode();
List<List<Node>> list = t.hbzhang_digui(root);
System.out.println(list.size());
}
/**
* 组织构造Tree型的结构数据
* @return
*/
public Node getNode() {
Node a = new Node("a");
Node b = new Node("b");
Node c = new Node("c");
List<Node> list_a = new ArrayList<Node>();
list_a.add(b);
list_a.add(c);
Node b1 = new Node("b1");
Node b2 = new Node("b2");
Node c1 = new Node("c1");
Node c2 = new Node("c2");
Node d1 = new Node("d1");
List<Node> list_c2 = new ArrayList<Node>();
list_c2.add(d1);
c2.setList(list_c2);
List<Node> list_b = new ArrayList<Node>();
List<Node> list_c = new ArrayList<Node>();
list_b.add(b1);
list_b.add(b2);
b.setList(list_b);
list_c.add(c1);
list_c.add(c2);
c.setList(list_c);
a.setList(list_a);
return a;
}
/**
* 递归从找出每一条Tree的路径
* @param node
* @return
*/
public List<List<Node>> hbzhang_digui(Node node){
List<List<Node>> list=new ArrayList<List<Node>>();
List<Node> childrenList=node.getList();
if(childrenList==null || childrenList.size()==0){
List<Node> temp=new ArrayList<Node>();
temp.add(node);
list.add(temp);
}else{
for(int i=0;i<childrenList.size();i++){
Node n=childrenList.get(i);
List<List<Node>> c_list=this.hbzhang_digui(n);
for(int j=0;j<c_list.size();j++){
List<Node> temp=c_list.get(j);
temp.add(0,node);
list.add(temp);
}
}
}
return list;
}
}