private List breadthFirstRest(boolean preorder) { List answer = new NodeList(); Stack stack = new Stack(); List nextLevelChildren = preorder ? getDirectChildren() : DefaultGroovyMethods.reverse(getDirectChildren()); while (!nextLevelChildren.isEmpty()) { List working = new NodeList(nextLevelChildren); nextLevelChildren = new NodeList(); for (Object child : working) { if (preorder) { answer.add(child); } else { stack.push(child); } if (child instanceof Node) { Node childNode = (Node) child; List children = childNode.getDirectChildren(); if (children.size() > 1 || (children.size() == 1 && !(children.get(0) instanceof String))) nextLevelChildren.addAll(preorder ? children : DefaultGroovyMethods.reverse(children)); } } } while (!stack.isEmpty()) { answer.add(stack.pop()); } return answer; }
private void breadthFirstRest(boolean preorder, int level, Closure c) { Stack<Tuple2<Object, Integer>> stack = new Stack<Tuple2<Object, Integer>>(); List nextLevelChildren = preorder ? getDirectChildren() : DefaultGroovyMethods.reverse(getDirectChildren()); while (!nextLevelChildren.isEmpty()) { List working = new NodeList(nextLevelChildren); nextLevelChildren = new NodeList(); for (Object child : working) { if (preorder) { callClosureForNode(c, child, level); } else { stack.push(new Tuple2<Object, Integer>(child, level)); } if (child instanceof Node) { Node childNode = (Node) child; List children = childNode.getDirectChildren(); if (children.size() > 1 || (children.size() == 1 && !(children.get(0) instanceof String))) nextLevelChildren.addAll(preorder ? children : DefaultGroovyMethods.reverse(children)); } } level++; } while (!stack.isEmpty()) { Tuple2<Object, Integer> next = stack.pop(); callClosureForNode(c, next.getFirst(), next.getSecond()); } }
private List breadthFirstRest() { List answer = new NodeList(); List nextLevelChildren = getDirectChildren(); while (!nextLevelChildren.isEmpty()) { List working = new NodeList(nextLevelChildren); nextLevelChildren = new NodeList(); for (Iterator iter = working.iterator(); iter.hasNext();) { Node childNode = (Node) iter.next(); answer.add(childNode); List children = childNode.getDirectChildren(); nextLevelChildren.addAll(children); } } return answer; }
private List breadthFirstRest() { List answer = new NodeList(); List nextLevelChildren = getDirectChildren(); while (!nextLevelChildren.isEmpty()) { List working = new NodeList(nextLevelChildren); nextLevelChildren = new NodeList(); for (Iterator iter = working.iterator(); iter.hasNext();) { Node childNode = (Node) iter.next(); answer.add(childNode); List children = childNode.getDirectChildren(); nextLevelChildren.addAll(children); } } return answer; }
private List breadthFirstRest() { List answer = new NodeList(); List nextLevelChildren = getDirectChildren(); while (!nextLevelChildren.isEmpty()) { List working = new NodeList(nextLevelChildren); nextLevelChildren = new NodeList(); for (Iterator iter = working.iterator(); iter.hasNext();) { Node childNode = (Node) iter.next(); answer.add(childNode); List children = childNode.getDirectChildren(); nextLevelChildren.addAll(children); } } return answer; }
private List breadthFirstRest() { List answer = new NodeList(); List nextLevelChildren = getDirectChildren(); while (!nextLevelChildren.isEmpty()) { List working = new NodeList(nextLevelChildren); nextLevelChildren = new NodeList(); for (Object child : working) { answer.add(child); if (child instanceof Node) { Node childNode = (Node) child; List children = childNode.getDirectChildren(); if (children.size() > 1 || (children.size() == 1 && !(children.get(0) instanceof String))) nextLevelChildren.addAll(children); } } } return answer; }