comparison 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
comparison
equal deleted inserted replaced
25:99346c04a3cf 26:9b91329e8a04
1 package treecms.proto.test;
2 import java.util.Iterator;
3
4 import java.util.LinkedList;
5
6 import treecms.proto.api.Node;
7
8 public class PreOrderTreeWalkerRecursive implements Iterable<Node>
9 {
10 private Node m_root;
11
12 public PreOrderTreeWalkerRecursive(Node _root)
13 {
14 m_root = _root;
15 }
16
17 @Override
18 public Iterator<Node> iterator()
19 {
20 return new PreOrderRecursiveIterator(m_root);
21 }
22
23 class PreOrderRecursiveIterator implements Iterator<Node>
24 {
25 private LinkedList<Node> nextList;
26
27 public PreOrderRecursiveIterator(Node _root)
28 {
29 nextList = new LinkedList<Node>();
30 getChildren(_root, nextList);
31 }
32
33 void getChildren(Node node, LinkedList<Node>list) {
34 list.add(node);
35 for(Node child : node.getChildList()){
36 getChildren(child,list);
37 }
38 }
39
40 @Override
41 public boolean hasNext()
42 {
43 return !nextList.isEmpty();
44 }
45
46 @Override
47 public Node next()
48 {
49 return nextList.poll();
50 }
51
52 @Override
53 public void remove()
54 {
55 throw new UnsupportedOperationException("cant remove from itrerator");
56 }
57 }
58
59 public LinkedList<Node> findPath(Node root, Node node) {
60 LinkedList<Node> list = new LinkedList<Node>();
61 list.addFirst(root);
62 findPath(root,node,list);
63 return list;
64 }
65
66 private boolean findPath(Node root, Node node, LinkedList<Node> list) {
67 if (root==node) return true;
68 for(Node child : node.getChildList()){
69 if (findPath(child,node,list)) {
70 list.addFirst(child);
71 return true;
72 }
73 }
74 return false; // backtrack
75 }
76
77 /*
78 public Node cloneTree(LinkedList<Node> path) {
79 Node old = path.poll();
80 Node node = new SimpleNode(old.getTitle());
81 node.setClassName(old.getClassName());
82 for(Node child: old.getChildList()) {
83 if (child==old && !path.isEmpty()) child = cloneTree(path);
84 node.getChildList().add(child);
85 }
86 return node;
87 }
88 */
89 }