今天学习了下递归遍历,好久没怎么用了,都有些忘记了。废话不多说,直接上例子。
下面是遍历简单的树形结构:
node1
-----node11
--------node111
-----node12
node2
-----node21
node3
public class Test {
public static void main(String[] args) {
List<Node> nodes = new ArrayList<Node>();
Node node1 = new Node();
node1.setId(1);
node1.setName("node1");
node1.setParentId(0);
node1.setLink(null);
nodes.add(node1);
Node node11 = new Node();
node11.setId(11);
node11.setName("node11");
node11.setParentId(1);
node11.setLink(null);
nodes.add(node11);
Node node111 = new Node();
node111.setId(111);
node111.setName("node111");
node111.setParentId(11);
node111.setLink(null);
nodes.add(node111);
Node node12 = new Node();
node12.setId(12);
node12.setName("node12");
node12.setParentId(1);
node12.setLink(null);
nodes.add(node12);
Node node2 = new Node();
node2.setId(2);
node2.setName("node2");
node2.setParentId(0);
node2.setLink(null);
nodes.add(node2);
Node node21 = new Node();
node21.setId(21);
node21.setName("node21");
node21.setParentId(2);
node21.setLink(null);
nodes.add(node21);
Node node3 = new Node();
node3.setId(3);
node3.setName("node3");
node3.setParentId(0);
node3.setLink(null);
nodes.add(node3);
List<Node> nodeList = new ArrayList<Node>();
for (Node node : nodes) {
Integer id = node.getId();
if (node.getParentId() == 0) {
node = buildTree(nodes,node);
nodeList.add(node);
}
}
int i=0;
for(Node item:nodeList){
System.out.println(item.toString());
show(item,i);
}
System.out.println(i);
}
public static void show(Node node,int num){
if(node.getChildrens().size()>0){
for(int m=0;m<num;m++){
System.out.print("---");
}
num++;
for(Node item:node.getChildrens()){
System.out.println("-----"+item.toString());
show(item,num);
}
}
}
public static Node buildTree(List<Node> list,Node node){
List<Node> children = new ArrayList<Node>();
for(Node item:list){
if(item.getParentId()==node.getId()){
children.add(buildTree(list,item));
}
}
node.setChildrens(children);
return node;
}
}