Mercurial > hg > Members > shoshi > TreeCMSv1
view src/treecms/proto/test/PreOrderTreeWalker.java @ 1:9d7863f367bb
iterator
author | one |
---|---|
date | Fri, 27 Aug 2010 16:46:35 +0900 |
parents | f815c7c1fb38 |
children | 7ede12c9a2e9 |
line wrap: on
line source
package treecms.proto.test; import java.util.Iterator; import java.util.LinkedList; import treecms.proto.api.NodeAPI; public class PreOrderTreeWalker implements Iterable<NodeAPI> { private NodeAPI m_root; public PreOrderTreeWalker(NodeAPI _root) { m_root = _root; } class IteratorState implements Iterator<NodeAPI> { LinkedList<LinkedList<NodeAPI>>stack = new LinkedList<LinkedList<NodeAPI>>(); LinkedList<NodeAPI>children; IteratorState(NodeAPI root) { children = new LinkedList<NodeAPI>(root.getChildList()); stack.addLast(children); } public boolean hasNext() { while (children.isEmpty()) { if (stack.isEmpty()) return false; children = stack.getLast(); stack.removeLast(); } return true; } public NodeAPI next() { NodeAPI next = children.get(0); children.remove(0); stack.addLast(children); children = new LinkedList<NodeAPI>(next.getChildList()); return next; } public void remove() { } } @Override public Iterator<NodeAPI> iterator() { return new IteratorState(m_root); } }