/**
* 網元節點數據結構
*/
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;
}