遞歸遍歷取樹形結構數據中的某個節點及所有子孫節點(java實現)

遞歸遍歷取樹形結構數據中的某個節點及所有子孫節點(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爲引用傳遞,遞歸方法也無須返回值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章