Mercurial > hg > Members > shoshi > TreeCMSv1
view src/treecms/proto/test/PreOrderTreeWalkerRecursive.java @ 26:9b91329e8a04
commit for zemi , doent move
author | ShoshiTAMAKI |
---|---|
date | Tue, 02 Nov 2010 18:44:21 +0900 |
parents | src/treecms/proto/edit/PreOrderTreeWalkerRecursive.java@e950264f82d3 |
children |
line wrap: on
line source
package treecms.proto.test; import java.util.Iterator; import java.util.LinkedList; import treecms.proto.api.Node; public class PreOrderTreeWalkerRecursive implements Iterable<Node> { private Node m_root; public PreOrderTreeWalkerRecursive(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.getChildList()){ 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.getChildList()){ if (findPath(child,node,list)) { list.addFirst(child); return true; } } return false; // backtrack } /* public Node cloneTree(LinkedList<Node> path) { Node old = path.poll(); Node node = new SimpleNode(old.getTitle()); node.setClassName(old.getClassName()); for(Node child: old.getChildList()) { if (child==old && !path.isEmpty()) child = cloneTree(path); node.getChildList().add(child); } return node; } */ }