Mercurial > hg > Members > shoshi > TreeCMSv1
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 } |