0
|
1 package treecms.proto.test;
|
|
2
|
|
3 import java.util.Iterator;
|
|
4 import java.util.LinkedList;
|
|
5
|
|
6 import treecms.proto.api.NodeAPI;
|
|
7
|
|
8 public class PreOrderTreeWalker implements Iterator<NodeAPI> , Iterable<NodeAPI>
|
|
9 {
|
|
10 private NodeAPI m_root;
|
|
11 private LinkedList<Iterator<NodeAPI>> m_childs;
|
|
12
|
|
13 private int m_pos;
|
|
14 public PreOrderTreeWalker(NodeAPI _root)
|
|
15 {
|
|
16 m_root = _root;
|
|
17 m_childs = new LinkedList<Iterator<NodeAPI>>();
|
|
18
|
|
19 for(NodeAPI child : _root.getChildList()){
|
|
20 m_childs.add((new PreOrderTreeWalker(child)).iterator());
|
|
21 }
|
|
22
|
|
23 m_pos = -2;
|
|
24 }
|
|
25
|
|
26 @Override
|
|
27 public Iterator<NodeAPI> iterator() {
|
|
28 // TODO Auto-generated method stub
|
|
29 return this;
|
|
30 }
|
|
31
|
|
32 @Override
|
|
33 public boolean hasNext() {
|
|
34 // TODO Auto-generated method stub
|
|
35 int next = m_pos + 1;
|
|
36
|
|
37 if(next < 0){
|
|
38 return true;
|
|
39 }
|
|
40
|
|
41 for(;next < m_childs.size();next ++){
|
|
42 System.out.println(m_pos);
|
|
43 if(m_childs.get(next).hasNext()){
|
|
44 return true;
|
|
45 }
|
|
46 }
|
|
47
|
|
48 return false;
|
|
49 }
|
|
50
|
|
51 @Override
|
|
52 public NodeAPI next() {
|
|
53 // TODO Auto-generated method stub
|
|
54 m_pos++;
|
|
55
|
|
56 if(m_pos < 0){
|
|
57 return this.m_root;
|
|
58 }
|
|
59
|
|
60 for(;m_pos < m_childs.size();m_pos ++){
|
|
61 NodeAPI nextNode = m_childs.get(m_pos).next();
|
|
62 if(nextNode != null){
|
|
63 return nextNode;
|
|
64 }
|
|
65 }
|
|
66
|
|
67 return null;
|
|
68 }
|
|
69
|
|
70 @Override
|
|
71 public void remove() {
|
|
72 // TODO Auto-generated method stub
|
|
73
|
|
74 }
|
|
75 }
|