Mercurial > hg > Members > shoshi > TreeCMSv2
view src/treecms/util/PreOrderTreeWalker.java @ 0:7ecb9273581d
hg init
author | shoshi |
---|---|
date | Wed, 16 Feb 2011 14:27:35 +0900 |
parents | |
children |
line wrap: on
line source
package treecms.util; import java.util.Iterator; import java.util.LinkedList; import treecms.api.Node; public class PreOrderTreeWalker implements Iterable<Node> { private Node m_root; public PreOrderTreeWalker(Node _root) { m_root = _root; } @Override public Iterator<Node> iterator() { return new PreOrderRecursiveIterator(m_root); } class PreOrderRecursiveIterator implements Iterator<Node> { private LinkedList<Node> nextList; public PreOrderRecursiveIterator(Node _root) { nextList = new LinkedList<Node>(); getChildren(_root, nextList); } void getChildren(Node node, LinkedList<Node>list) { list.add(node); for(Node child : node.getChildren()){ getChildren(child,list); } } @Override public boolean hasNext() { return !nextList.isEmpty(); } @Override public Node next() { return nextList.poll(); } @Override public void remove() { throw new UnsupportedOperationException("cant remove from itrerator"); } } public LinkedList<Node> findPath(Node root, Node node) { LinkedList<Node> list = new LinkedList<Node>(); list.addFirst(root); findPath(root,node,list); return list; } private boolean findPath(Node root, Node node, LinkedList<Node> list) { if (root==node) return true; for(Node child : node.getChildren()){ if (findPath(child,node,list)) { list.addFirst(child); return true; } } return false; // backtrack } }