树 递归测试

来源:互联网 发布:oracle数据库入门 编辑:程序博客网 时间:2024/06/01 14:13
/** * 网元节点数据结构  */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;}


0 0