If you are sure that the structure is a tree (a node cannot have more than one parent), this will list the nodes in order of depth:
public static List<Node> returnAllNodes(Node node){ List<Node> listOfNodes = new ArrayList<Node>(); addAllNodes(node, listOfNodes); return listOfNodes; } private static void addAllNodes(Node node, List<Node> listOfNodes) { if (node != null) { listOfNodes.add(node); List<Node> children = node.getChildren(); if (children != null) { for (Node child: children) { addAllNodes(child, listOfNodes); } } } }
If the nodes can have multiple parents, change the first line of addAllNodes to:
if (node != null && !listOfNodes.contains(node)) {
The first algorithm is as follows:
public static List<Node> returnAllNodes(Node node){ List<Node> listOfNodes = new ArrayList<Node>(); if (node != null) { listOfNodes.add(node); for(int i = 0; i < listOfNodes.size(); ++i) { Node n = listOfNodes.get(i); List<Node> children = n.getChildren(); if (children != null) { for (Node child: children) { if (!listOfNodes.contains(child)) { listOfNodes.add(child); } } } } } return listOfNodes; }
source share