您的位置:首页 > 其它

Tree结构数据拆分成List集合算法

2015-07-17 13:14 204 查看
前段时间做项目,遇到了一个将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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: