ツリーをトラバースする次のコードがあります(事前注文):
public void traverse(Node node) {
visit(node);
for (Node child : node.getChildren()) {
traverse(child);
}
}
段階的なトラバースを行いたいと思います。のようなものでIterator
、別のアプリケーションになる可能性のあるクライアント (呼び出し元) がトラバースを制御できるようにします。(例: UI には「次へ」ボタンがあり、このボタンをクリックすると、次のノードに移動する必要があります)
私の現在の解決策は次のようなものです:
List<Node> nodes = new ArrayList<Node>();
collectNodes(root, nodes);
Iterator<Node> it = nodes.iterator();
// do my job.
...
public void collectNodes(Node node, List<Node> nodes) {
nodes.add(node);
for (Node child : node.getChildren()) {
collectNodes(child, nodes);
}
}
コードでわかるように、すべてのノード (collectNodes 内) にアクセスして、それらを収集し、予約注文形式のリストに入れています。
この余分な (collectNodes) 反復なしで解決策があるかどうか疑問に思っていましたか?
よろしく、モハマド