您的位置:首页 > 编程语言 > Java开发

递归遍历树

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 递归