递归遍历树
2016-01-26 15:45
417 查看
package com.yc.util;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class NodeUtil{
List<Node> returnList = new ArrayList<Node>();
public static void main(String[] args) {
List<Node> data = new ArrayList<Node>();
Node root = new Node();
root.setName("因才");
root.setId(1);
root.setPid(0);
data.add(root);
Node node1 = new Node();
node1.setName("开发部");
node1.setId(2);
node1.setPid(1);
data.add(node1);
Node node12 = new Node();
node12.setName("开发一组");
node12.setId(4);
node12.setPid(2);
data.add(node12);
Node node3 = new Node();
node3.setName("财务部");
node3.setId(3);
node3.setPid(1);
data.add(node3);
NodeUtil nodeUtil = new NodeUtil();
List<Node> nodeList = nodeUtil.getChildNodes(data, 0);
System.out.println(nodeList);
}
/**
* 根据父节点的ID获取所有子节点
* @param list 分类表
* @param typeId 传入的父节点ID
* @return String
*/
public List<Node> getChildNodes(List<Node> list,int pid) {
List<Node> returnList = new ArrayList<Node>();
for (Iterator<Node> iterator = list.iterator(); iterator.hasNext();) {
Node t = (Node) iterator.next();
// 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
if (t.getPid()==pid) {
recursionFn(list, t);
returnList.add(t);
}
}
return returnList;
}
/**
* 递归列表
* @param list
* @param TreeObject
*/
private void recursionFn(List<Node> list, Node t) {
List<Node> childList = getChildList(list, t);// 得到子节点列表
t.setNodes(childList);
for (Node tChild : childList) {
if (hasChild(list, tChild)) {// 判断是否有子节点
Iterator<Node> it = childList.iterator();
while (it.hasNext()) {
Node n = (Node) it.next();
recursionFn(list, n);
}
}
}
}
// 得到子节点列表
private List<Node> getChildList(List<Node> list, Node t) {
List<Node> tlist = new ArrayList<Node>();
Iterator<Node> it = list.iterator();
while (it.hasNext()) {
Node n = (Node) it.next();
if (n.getPid() == t.getId()) {
tlist.add(n);
}
}
return tlist;
}
// 判断是否有子节点
private boolean hasChild(List<Node> list, Node t) {
return getChildList(list, t).size() > 0 ? true : false;
}
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class NodeUtil{
List<Node> returnList = new ArrayList<Node>();
public static void main(String[] args) {
List<Node> data = new ArrayList<Node>();
Node root = new Node();
root.setName("因才");
root.setId(1);
root.setPid(0);
data.add(root);
Node node1 = new Node();
node1.setName("开发部");
node1.setId(2);
node1.setPid(1);
data.add(node1);
Node node12 = new Node();
node12.setName("开发一组");
node12.setId(4);
node12.setPid(2);
data.add(node12);
Node node3 = new Node();
node3.setName("财务部");
node3.setId(3);
node3.setPid(1);
data.add(node3);
NodeUtil nodeUtil = new NodeUtil();
List<Node> nodeList = nodeUtil.getChildNodes(data, 0);
System.out.println(nodeList);
}
/**
* 根据父节点的ID获取所有子节点
* @param list 分类表
* @param typeId 传入的父节点ID
* @return String
*/
public List<Node> getChildNodes(List<Node> list,int pid) {
List<Node> returnList = new ArrayList<Node>();
for (Iterator<Node> iterator = list.iterator(); iterator.hasNext();) {
Node t = (Node) iterator.next();
// 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
if (t.getPid()==pid) {
recursionFn(list, t);
returnList.add(t);
}
}
return returnList;
}
/**
* 递归列表
* @param list
* @param TreeObject
*/
private void recursionFn(List<Node> list, Node t) {
List<Node> childList = getChildList(list, t);// 得到子节点列表
t.setNodes(childList);
for (Node tChild : childList) {
if (hasChild(list, tChild)) {// 判断是否有子节点
Iterator<Node> it = childList.iterator();
while (it.hasNext()) {
Node n = (Node) it.next();
recursionFn(list, n);
}
}
}
}
// 得到子节点列表
private List<Node> getChildList(List<Node> list, Node t) {
List<Node> tlist = new ArrayList<Node>();
Iterator<Node> it = list.iterator();
while (it.hasNext()) {
Node n = (Node) it.next();
if (n.getPid() == t.getId()) {
tlist.add(n);
}
}
return tlist;
}
// 判断是否有子节点
private boolean hasChild(List<Node> list, Node t) {
return getChildList(list, t).size() > 0 ? true : false;
}
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树