I'm trying to collect all nodes in specific post-order traversal order. However, I'm not quite sure how to do this when my only function is getChildren(), rather than a left or right child. Here is the traversal I currently have, in Java.
Set<Node> postOrderedNodes = traverseSubAssembly(rootNode);
private static Set<Node> traverseSubAssembly(Node node) {
Set<Node> nodes = new LinkedHashSet<>();
nodes.add(node);
for (Node child : node.getChildren()) {
nodes.addAll(traverseSubAssembly(child));
}
return nodes;
}
Set<Node> postOrderedNodes = traverseSubAssembly(rootNode);
private static Set<Node> traverseSubAssembly(Node node) {
Set<Node> nodes = new HashSet<>();
for (Node child : node.getChildren()) {
nodes.addAll(traverseSubAssembly(child));
}
nodes.add(node);
// Add the node after its children have been processed not before.
return nodes;
}
To get exact Order:
And also one more thing if you need to maintain insertion order of nodes U can use LinkedHashSet since hashSet does not maintain.