java遍历树
2014-01-14 10:23
316 查看
public class TreeTool {
/**
* 将集合建立成树结构
*
* @param dirs
* @return
*/
public List<Nav2> buildListToTree(List<Nav2> dirs) {
List<Nav2> roots = findRoots(dirs);
@SuppressWarnings("unchecked")
List<Nav2> notRoots = (List<Nav2>) CollectionUtils.subtract(dirs, roots);
for (Nav2 root : roots) {
root.setChildren(findChildren(root, notRoots));
}
return roots;
}
/**
* 找出集合中的根元素
*
* @param allDirs
* @return
*/
public List<Nav2> findRoots(List<Nav2> allNav2s) {
List<Nav2> results = new ArrayList<Nav2>();
for (Nav2 Nav2 : allNav2s) {
boolean isRoot = true;
for (Nav2 comparedOne : allNav2s) {
if (Nav2.getPid() == comparedOne.getId()) {
isRoot = false;
break;
}
}
if (isRoot) {
// Nav2.setLevel(0);
results.add(Nav2);
// Nav2.setRootId(Nav2.getId());
}
}
return results;
}
/**
* 递归找子目录
*
* @param root
* @param allDirs
* @return
*/
@SuppressWarnings("unchecked")
public List<Nav2> findChildren(Nav2 root, List<Nav2> allNav2s) {
List<Nav2> children = new ArrayList<Nav2>();
for (Nav2 comparedOne : allNav2s) {
if (comparedOne.getPid() == root.getId()) {
// comparedOne.setParent(root);
// comparedOne.setLevel(root.getLevel() + 1);
children.add(comparedOne);
}
}
List<Nav2> notChildren = (List<Nav2>) CollectionUtils.subtract(allNav2s, children);
for (Nav2 child : children) {
List<Nav2> tmpChildren = findChildren(child, notChildren);
// if (tmpChildren == null || tmpChildren.size() < 1) {
// child.setLeaf(true);
// } else {
// child.setLeaf(false);
// }
child.setChildren(tmpChildren);
}
return children;
}
}
/**
* 将集合建立成树结构
*
* @param dirs
* @return
*/
public List<Nav2> buildListToTree(List<Nav2> dirs) {
List<Nav2> roots = findRoots(dirs);
@SuppressWarnings("unchecked")
List<Nav2> notRoots = (List<Nav2>) CollectionUtils.subtract(dirs, roots);
for (Nav2 root : roots) {
root.setChildren(findChildren(root, notRoots));
}
return roots;
}
/**
* 找出集合中的根元素
*
* @param allDirs
* @return
*/
public List<Nav2> findRoots(List<Nav2> allNav2s) {
List<Nav2> results = new ArrayList<Nav2>();
for (Nav2 Nav2 : allNav2s) {
boolean isRoot = true;
for (Nav2 comparedOne : allNav2s) {
if (Nav2.getPid() == comparedOne.getId()) {
isRoot = false;
break;
}
}
if (isRoot) {
// Nav2.setLevel(0);
results.add(Nav2);
// Nav2.setRootId(Nav2.getId());
}
}
return results;
}
/**
* 递归找子目录
*
* @param root
* @param allDirs
* @return
*/
@SuppressWarnings("unchecked")
public List<Nav2> findChildren(Nav2 root, List<Nav2> allNav2s) {
List<Nav2> children = new ArrayList<Nav2>();
for (Nav2 comparedOne : allNav2s) {
if (comparedOne.getPid() == root.getId()) {
// comparedOne.setParent(root);
// comparedOne.setLevel(root.getLevel() + 1);
children.add(comparedOne);
}
}
List<Nav2> notChildren = (List<Nav2>) CollectionUtils.subtract(allNav2s, children);
for (Nav2 child : children) {
List<Nav2> tmpChildren = findChildren(child, notChildren);
// if (tmpChildren == null || tmpChildren.size() < 1) {
// child.setLeaf(true);
// } else {
// child.setLeaf(false);
// }
child.setChildren(tmpChildren);
}
return children;
}
}
相关文章推荐
- java 遍历树节点 同时保留所有的从根到叶节点的路径
- Java遍历树(深度优先+广度优先)
- java遍历树(深度遍历和广度遍历)
- java遍历树(深度遍历和广度遍历
- Java遍历树(深度优先+广度优先)
- Java遍历树(深度优先+广度优先)
- Java遍历树(深度优先+广度优先)
- java 遍历树的四种方式
- java 创建二叉树 前序、中序、后续 递归遍历树 和 非递归遍历,递归求树高,递归求树节点数
- 遍历树节点(多层)的方法(java)
- java 遍历树结点 同时保留所有从根到叶子结点的路径
- jsp/javabean分页列出数据
- JAVA面试试题集
- java获取系统鼠标位置(jni+dll应用)
- java中string对象中的split方法的使用
- Java中对象的串行化(Serialization)和transient关键字
- Java Thread应该注意的问题
- Flash P2P 通信技巧 (AS-Java-AS)
- 关于Java调用dll的方法
- 北京瑞斯康达java笔试题目