package com.kd.createimage;
import java.util.List;
/**
* 节点类
* @author lizc
*
*/
public class Node {
private String parent;//父节点名字
private String nodeName;//当前节点名字
private List<Node> childrenList;//子节点集合
private int width;//节点宽度
private int height;//节点长度
private int left;//节点左位置
private int right;//节点右位置
public float getWidth() {
return width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public int getLeft() {
return left;
}
public void setLeft(int left) {
this.left = left;
}
public int getRight() {
return right;
}
public void setRight(int right) {
this.right = right;
}
public void setWidth(int width) {
this.width = width;
}
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
public String getNodeName() {
return nodeName;
}
public void setNodeName(String nodeName) {
this.nodeName = nodeName;
}
public List<Node> getChildrenList() {
return childrenList;
}
public void setChildrenList(List<Node> childrenList) {
this.childrenList = childrenList;
}
}
创建树形结构类
package com.kd.createimage;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 递归构建树 工具类
* @author TR
*
*/
public class TreeManager {
private static List<Node> nodeList = null;//所有节点的集合
private static Node treeNode;//根节点
/**
* 构建树
* @param currentNode 当前节点对象
* @param nodeList 所有节点的集合
* @return
*/
public static Node buildTree(Node currentNode,List<Node> nodeList){
if(nodeList == null){
return null;
}
if(nodeList.size() == 0){
return treeNode;
}
if(treeNode == null){
treeNode = new Node();
treeNode.setNodeName("root");
}
//子节点集合初始化
ArrayList<Node> chilldrenNodes = new ArrayList<Node>();
Iterator<Node> it = nodeList.iterator();
//对所有节点集合进行遍历
if(currentNode == null){//currentNode 是null 说明是第一次调用 获取所有的第一层节点
currentNode = treeNode;
}
while(it.hasNext()){
Node node = it.next();//获取每一个节点
if(node.getParent() == null){
chilldrenNodes.add(node);//向子节点中添加元素
it.remove();//将查找到的这个子节点从 node列表中删除
}
else{
if(node.getParent().equals(currentNode.getNodeName())){
chilldrenNodes.add(node);//向子节点中添加元素
it.remove();//将查找到的这个子节点从 node列表中删除
}
}
}
currentNode.setChildrenList(chilldrenNodes);
//对每一个子节点 进行递归调用 查找其子节点
for(int i = 0;i < chilldrenNodes.size();i++){
Node cNode = chilldrenNodes.get(i);
//递归调用
buildTree(cNode,nodeList);
}
return treeNode;
}
/**
* 添加一个新节点
* @param nodeName 节点名称
* @param parent 父节点
*/
public static void addNode(String nodeName,String parent){
if(nodeList == null){
nodeList = new ArrayList<Node>();
}
Node node = new Node();
node.setNodeName(nodeName);
node.setParent(parent);
nodeList.add(node);
}
public static void main(String[] args){
/*addNode("d1",null);
addNode("d2","d1");
addNode("d3","d2");
addNode("d4","d3");
addNode("d5","d4");
addNode("d6","d5");
addNode("d7","d6");
addNode("d8","d7");
addNode("d9","d4");
addNode("d10","d6");
addNode("d11","d10");
addNode("d12","d11");
addNode("d13","d12");
addNode("d14","d12");
addNode("d15","d14");*/
addNode("d1",null);
addNode("d2",null);
addNode("d3","d1");
addNode("d4","d2");
addNode("d5","d2");
addNode("d6","d5");
buildTree(null,nodeList);
}
}