File tree Expand file tree Collapse file tree 6 files changed +123
-7
lines changed Expand file tree Collapse file tree 6 files changed +123
-7
lines changed Original file line number Diff line number Diff line change @@ -17,5 +17,8 @@ HEADERS += \
17
17
pair.h \
18
18
less.h \
19
19
greater.h \
20
- maptofirst.h
20
+ maptofirst.h \
21
+ tree.h \
22
+ treenode.h \
23
+ treeiterator.h
21
24
Original file line number Diff line number Diff line change @@ -10,7 +10,7 @@ public :
10
10
bool operator ()(const T &left, const T &right){
11
11
Less<T> less;
12
12
bool lesser = less (left, right);
13
- bool equal = !less (left, right) && !less (right,left);
13
+ bool equal = !less (left, right) && !less (right, left);
14
14
return !lesser && !equal;
15
15
}
16
16
Original file line number Diff line number Diff line change @@ -18,7 +18,7 @@ using namespace std;
18
18
#include " greater.h"
19
19
#include " maptofirst.h"
20
20
// #include "order.h"
21
- // #include "tree.h"
21
+ #include " tree.h"
22
22
// #include "map.h"
23
23
24
24
// you should define your own namespace for
@@ -32,8 +32,6 @@ using namespace std;
32
32
// template class Map<int, string>;
33
33
34
34
// list and count all nodes in a set using an iterator
35
- /*
36
-
37
35
template <class Container >
38
36
int printAndCount (Container & c) {
39
37
@@ -60,8 +58,6 @@ int printAndCountBackwards(Container & c) {
60
58
return n;
61
59
}
62
60
63
- */
64
-
65
61
int testTemplates (void )
66
62
{
67
63
Original file line number Diff line number Diff line change
1
+ #ifndef TREE_H
2
+ #define TREE_H
3
+
4
+ #include " less.h"
5
+
6
+ template <class T , template <typename > class Order = Less > class Tree {
7
+
8
+ TreeNode<T, Order> m_root;
9
+
10
+ };
11
+
12
+ #endif // TREE_H
Original file line number Diff line number Diff line change
1
+ #ifndef TREEITERATOR_H
2
+ #define TREEITERATOR_H
3
+
4
+ #include " treenode.h"
5
+
6
+ template <class T , template <typename > class Order > class TreeIterator {
7
+
8
+ friend class TreeNode <T, Order>;
9
+
10
+ public:
11
+
12
+ TreeIterator (TreeNode<T, Order> node) : m_node(node) {}
13
+
14
+ T& operator *() {
15
+ return m_node->m_value ;
16
+ }
17
+
18
+ T* operator ->() {
19
+ return (T*)(m_node->m_value &);
20
+ }
21
+
22
+ TreeIterator<T, Order>& operator ++() {
23
+ // erst rechts prüfen, ob vorhanden
24
+ // ansonsten solange nach oben, bis größerer gefunden
25
+ if (m_node->m_right != NULL )
26
+ return TreeIterator (m_right);
27
+
28
+ TreeNode<T, Order> parent = m_node->m_up ;
29
+
30
+ Order<T> functor;
31
+ while (functor (m_node->m_value , parent->value )) {
32
+ parent = parent->m_up ;
33
+ }
34
+
35
+ m_node = parent;
36
+ return *this ;
37
+ }
38
+
39
+ TreeIterator<T, Order>& operator --() {
40
+
41
+ }
42
+
43
+ bool operator ==(const TreeIterator<T, Order> &rhs);
44
+ bool operator !=(const TreeIterator<T, Order> &rhs);
45
+
46
+
47
+ private:
48
+
49
+ TreeNode<T, O> m_node;
50
+
51
+ };
52
+
53
+
54
+
55
+ #endif // TREEITERATOR_H
Original file line number Diff line number Diff line change
1
+ #ifndef TREENODE_H
2
+ #define TREENODE_H
3
+
4
+ template <class T , template <typename > class Order > class TreeNode {
5
+
6
+ public:
7
+
8
+ T& value (void ) {
9
+ return m_value;
10
+ }
11
+
12
+ TreeNode<T, Order>* find (const T& value) {
13
+ Order<T> order; // less<int>
14
+ if (order (m_value, value))
15
+ return m_left->find (value);
16
+
17
+ if (order (value, m_value))
18
+ return m_right->find (value);
19
+
20
+ if (m_value == value)
21
+ return this ;
22
+
23
+ return NULL ;
24
+
25
+ }
26
+
27
+ TreeNode<T, Order>* findFirst (void ) {
28
+ if (m_left != NULL )
29
+ return m_left->findFirst ();
30
+
31
+ return this ;
32
+ }
33
+
34
+ TreeNode<T, Order>* findLast (void ) {
35
+ if (m_right != NULL )
36
+ return m_right->findLast ();
37
+
38
+ return this ;
39
+ }
40
+
41
+ protected:
42
+
43
+ T m_value;
44
+ TreeNode<T, Order>* m_up;
45
+ TreeNode<T, Order>* m_left;
46
+ TreeNode<T, Order>* m_right;
47
+
48
+ };
49
+
50
+ #endif // TREENODE_H
You can’t perform that action at this time.
0 commit comments