樹 遞歸測試

/**
 * 網元節點數據結構 
 */
public class NeNode {
	private String dn;
	private boolean versionMgt;
	private List<NeNode> children = new ArrayList<NeNode>();
	public NeNode(){
	}
	public NeNode(String dn){
		this.dn = dn;
	}
	public List<NeNode> getChildren() {
		return children;
	}
	public void setChildren(List<NeNode> children) {
		this.children = children;
	}
	public String getDn() {
		return dn;
	}
	public void setDn(String dn) {
		this.dn = dn;
	}
	public boolean isVersionMgt() {
		return versionMgt;
	}
	public void setVersionMgt(boolean versionMgt) {
		this.versionMgt = versionMgt;
	}
	public String toString(){
		return "dn="+dn+"   versionMgt="+versionMgt;
	}
}

	// 遞歸測試
	public static void main(String[] args) {
		List<NeNode> total = new ArrayList<NeNode>();
		// 第一種情況父節點不支持,子節點也不支持
		NeNode parent1 = new NeNode("parent1");
		parent1.setVersionMgt(false);
		
		NeNode children1 = new NeNode("children1");
		children1.setVersionMgt(false);
		
		NeNode cc = new NeNode("cc");
		cc.setVersionMgt(false);
		
		children1.getChildren().add(cc);
		parent1.getChildren().add(children1);
		// 第二種情況父節點不支持,子節點支持
		NeNode parent2 = new NeNode("parent2");
		parent2.setVersionMgt(false);
		
		NeNode children2 = new NeNode("children2");
		children2.setVersionMgt(true);
		parent2.getChildren().add(children2);
		// 第三種情況父節點支持,子節點不支持
		NeNode parent3 = new NeNode("parent3");
		parent3.setVersionMgt(true);
		
		NeNode children3 = new NeNode("children3");
		children3.setVersionMgt(false);
		parent3.getChildren().add(children3);
		// 第四種情況父節點支持,子節點支持
		NeNode parent4 = new NeNode("parent4");
		parent4.setVersionMgt(true);
		
		NeNode children4 = new NeNode("children4");
		children4.setVersionMgt(true);
		parent4.getChildren().add(children4);

		total.add(parent1);
		total.add(parent2);
		total.add(parent3);
		total.add(parent4);

		List<NeNode> result = new ArrayList<NeNode>();
		List<NeNode> nnn = fetch(total, result);

		for (NeNode node : nnn) {
			System.out.println(node.toString() + " length="
					+ node.getChildren().size());
		}
		System.out.println(nnn);

	}

	public static List<NeNode> fetch(List<NeNode> total, List<NeNode> result) {
		// 解題思路 :一直解析 解析到有true 就加載進去如果沒有就不級
		for (NeNode node : total) {
			// 1. 判斷首次節點有沒有,有就添加進去,遍歷下一個節點,沒有就查看是否含有子節點
			if (node.isVersionMgt()) {
				result.add(node);
				continue;
			}
			// 2.父節點沒有,判斷有沒有子節點,子節點中,只要有個一含有true 就返回true,添加進去
			if (node.getChildren().size() != 0) {
				if (isChildVerMgt(node.getChildren())) {
					result.add(node);
				}
			}
		}
		return result;
	}

	private static boolean isChildVerMgt(List<NeNode> children) {
		for (NeNode node : children) {
			if (node.isVersionMgt()) {
				return true;
			}
			if (node.getChildren().size() != 0) {
				if(isChildVerMgt(node.getChildren())){
					return true;
				}
			}
		}
		return false;
	}


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