递归遍历取树形结构子孙节点(java实现)
1、数据元素组成如下
public class Node{
private int id;
private int parentId; //没父项的parentId设一个固定值,如-1
private String name;
private List<Node> nodes=new ArrayList<>();
....
}
2、拼装成树形结构
List<Node> nodes= new ArrayList<>(); //假设nodes里面存放了一颗完整树的所有节点
Map<Integer,Node> maps=new HashMap<>();
for(Node node:nodes){
maps.put(mode.getId(),Node);
}
for(Node node:nodes){
int parentId=node.getParentId();
if(parentId!=-1){
//没父项的即为树形结构根节点
Node parent=maps.get(parentId);
parent.getChildren().add(node);
}
}
3、递归遍历所有节点及其所有子节点
//假设现在我们要得到id为10的Node及其所有子孙Node
public void getAllChilderen(Node node,List<Node> nodes){
nodes.add(node);
if(node.getChildren().size()!=0){
for(Node mNode:node.getChildren){
getAllChildren(mNode,nodes)
}
}
}
List<Node> nodes=new ArrayList<>();
Node node=maps.get(10);
getAllChildren(node,nodes); //nodes为引用传递,递归方法也无须返回值