- package tree;   
 
-   
 
- import java.util.ArrayList;   
 
- import java.util.List;   
 
-   
 
- import org.apache.commons.collections.CollectionUtils;   
 
-   
 
-   
 
- public class TreeBuilder {   
 
-   
 
-     
 
-     @SuppressWarnings("unchecked")   
 
-     private List<Node> buildListToTree(List<Node> dirs) {   
 
-         List<Node> roots = findRoots(dirs);   
 
-         List<Node> notRoots = (List<Node>) CollectionUtils.subtract(dirs, roots);   
 
-         for (Node root : roots) {   
 
-             root.setChildren(findChildren(root, notRoots));   
 
-         }   
 
-         return roots;   
 
-     }   
 
-   
 
-     
 
-     public List<Node> findRoots(List<Node> allNodes) {   
 
-         List<Node> results = new ArrayList<Node>();   
 
-         for (Node node : allNodes) {   
 
-             boolean isRoot = true;   
 
-             for (Node comparedOne : allNodes) {   
 
-                 if (node.getParentId() == comparedOne.getId()) {   
 
-                     isRoot = false;   
 
-                     break;   
 
-                 }   
 
-             }   
 
-             if (isRoot) {   
 
-                 node.setLevel(0);   
 
-                 results.add(node);   
 
-                 node.setRootId(node.getId());   
 
-             }   
 
-         }   
 
-         return results;   
 
-     }   
 
-   
 
-     
 
-     @SuppressWarnings("unchecked")   
 
-     private List<Node> findChildren(Node root, List<Node> allNodes) {   
 
-         List<Node> children = new ArrayList<Node>();   
 
-   
 
-         for (Node comparedOne : allNodes) {   
 
-             if (comparedOne.getParentId() == root.getId()) {   
 
-                 comparedOne.setParent(root);   
 
-                 comparedOne.setLevel(root.getLevel() + 1);   
 
-                 children.add(comparedOne);   
 
-             }   
 
-         }   
 
-         List<Node> notChildren = (List<Node>) CollectionUtils.subtract(allNodes, children);   
 
-         for (Node child : children) {   
 
-             List<Node> tmpChildren = findChildren(child, notChildren);   
 
-             if (tmpChildren == null || tmpChildren.size() < 1) {   
 
-                 child.setLeaf(true);   
 
-             } else {   
 
-                 child.setLeaf(false);   
 
-             }   
 
-             child.setChildren(tmpChildren);   
 
-         }   
 
-         return children;   
 
-     }   
 
-       
 
-     public static void main(String[] args) {   
 
-         TreeBuilder tb = new TreeBuilder();   
 
-         List<Node> allNodes = new ArrayList<Node>();   
 
-         allNodes.add(new Node(1,0,"节点1"));   
 
-         allNodes.add(new Node(2,0,"节点2"));   
 
-         allNodes.add(new Node(3,0,"节点3"));   
 
-         allNodes.add(new Node(4,1,"节点4"));   
 
-         allNodes.add(new Node(5,1,"节点5"));   
 
-         allNodes.add(new Node(6,1,"节点6"));   
 
-         allNodes.add(new Node(7,4,"节点7"));   
 
-         allNodes.add(new Node(8,4,"节点8"));   
 
-         allNodes.add(new Node(9,5,"节点9"));   
 
-         allNodes.add(new Node(10,100,"节点10"));   
 
-         List<Node> roots = tb.buildListToTree(allNodes);   
 
-         for(Node n:roots){   
 
-             System.out.println(n);   
 
-         }   
 
-           
 
-     }   
 
- }   
 
-   
 
-   
 
-   
 
-   
 
-   
 
-   
 
- package tree;   
 
-   
 
- import java.util.List;   
 
-   
 
- public class Node implements java.io.Serializable {   
 
- private static final long serialVersionUID = -2721191232926604726L;   
 
-   
 
- private int id;   
 
-   
 
- private int parentId;   
 
-   
 
- private Node parent;   
 
-   
 
- private List<Node> children;   
 
-   
 
- private String name;   
 
-   
 
- private int level;   
 
-   
 
- private int sort;   
 
-   
 
- private int rootId;   
 
-   
 
- private String type;   
 
-   
 
- private boolean isLeaf;   
 
-   
 
- private String description;   
 
-   
 
-   
 
- public Node() {   
 
- super();   
 
- }   
 
-   
 
- public Node(int id, int parentId, String name) {   
 
- super();   
 
- this.id = id;   
 
- this.parentId = parentId;   
 
- this.name = name;   
 
- }   
 
-   
 
-   
 
- public String getDescription() {   
 
- return description;   
 
- }   
 
-   
 
- public void setDescription(String description) {   
 
- this.description = description;   
 
- }   
 
-   
 
- public int getId() {   
 
- return id;   
 
- }   
 
-   
 
- public void setId(int id) {   
 
- this.id = id;   
 
- }   
 
-   
 
- public Node getParent() {   
 
- return parent;   
 
- }   
 
-   
 
- public void setParent(Node parent) {   
 
- this.parent = parent;   
 
- }   
 
-   
 
- public int getParentId() {   
 
- return parentId;   
 
- }   
 
-   
 
- public void setParentId(int parentId) {   
 
- this.parentId = parentId;   
 
- }   
 
-   
 
- public String getName() {   
 
- return name;   
 
- }   
 
-   
 
- public void setName(String name) {   
 
- this.name = name;   
 
- }   
 
-   
 
- public int getLevel() {   
 
- return level;   
 
- }   
 
-   
 
- public void setLevel(int level) {   
 
- this.level = level;   
 
- }   
 
-   
 
- public String getType() {   
 
- return type;   
 
- }   
 
-   
 
- public List<Node> getChildren() {   
 
- return children;   
 
- }   
 
-   
 
- public void setChildren(List<Node> children) {   
 
- this.children = children;   
 
- }   
 
-   
 
- public void setType(String type) {   
 
- this.type = type;   
 
- }   
 
-   
 
- public boolean isLeaf() {   
 
- return isLeaf;   
 
- }   
 
-   
 
- public void setLeaf(boolean isLeaf) {   
 
- this.isLeaf = isLeaf;   
 
- }   
 
-   
 
- public int getSort() {   
 
- return sort;   
 
- }   
 
-   
 
- public void setSort(int sort) {   
 
- this.sort = sort;   
 
- }   
 
-   
 
-   
 
-   
 
- public int getRootId() {   
 
-         return rootId;   
 
-     }   
 
-   
 
- public void setRootId(int rootId) {   
 
-         this.rootId = rootId;   
 
-     }   
 
-   
 
-   
 
-   
 
-   
 
-   
 
-   
 
-       
 
-   
 
-     @Override   
 
-     public int hashCode() {   
 
-         final int prime = 31;   
 
-         int result = 1;   
 
-         result = prime * result + id;   
 
-         result = prime * result + parentId;   
 
-         return result;   
 
-     }   
 
-   
 
-     @Override   
 
-     public boolean equals(Object obj) {   
 
-         if (this == obj)   
 
-             return true;   
 
-         if (obj == null)   
 
-             return false;   
 
-         if (getClass() != obj.getClass())   
 
-             return false;   
 
-         Node other = (Node) obj;   
 
-         if (id != other.id)   
 
-             return false;   
 
-         if (parentId != other.parentId)   
 
-             return false;   
 
-         return true;   
 
-     }   
 
-   
 
-     @Override   
 
- public String toString() {   
 
- return "Node {id=" + id + ", parentId=" + parentId   
 
- + ", children=" + children + ", name=" + name + "}";   
 
- }   
 
- }   
 
 
             
            posted @ 
2017-05-29 11:42 
天涯海角路 
阅读(
377) 
评论() 
 
收藏 
举报