Skip to content

Commit 5825053

Browse files
author
tiberius
committed
incomplete tree implementation
1 parent 360d04e commit 5825053

File tree

6 files changed

+123
-7
lines changed

6 files changed

+123
-7
lines changed

cpp4j/cpp4j.pro

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,8 @@ HEADERS += \
1717
pair.h \
1818
less.h \
1919
greater.h \
20-
maptofirst.h
20+
maptofirst.h \
21+
tree.h \
22+
treenode.h \
23+
treeiterator.h
2124

cpp4j/greater.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public :
1010
bool operator ()(const T &left, const T &right){
1111
Less<T> less;
1212
bool lesser = less(left, right);
13-
bool equal = !less(left, right) && !less(right,left);
13+
bool equal = !less(left, right) && !less(right, left);
1414
return !lesser && !equal;
1515
}
1616

cpp4j/testTemplates.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ using namespace std;
1818
#include "greater.h"
1919
#include "maptofirst.h"
2020
//#include "order.h"
21-
//#include "tree.h"
21+
#include "tree.h"
2222
//#include "map.h"
2323

2424
// you should define your own namespace for
@@ -32,8 +32,6 @@ using namespace std;
3232
//template class Map<int, string>;
3333

3434
// list and count all nodes in a set using an iterator
35-
/*
36-
3735
template<class Container>
3836
int printAndCount(Container & c) {
3937

@@ -60,8 +58,6 @@ int printAndCountBackwards(Container & c) {
6058
return n;
6159
}
6260

63-
*/
64-
6561
int testTemplates(void)
6662
{
6763

cpp4j/tree.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
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

cpp4j/treeiterator.h

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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

cpp4j/treenode.h

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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

0 commit comments

Comments
 (0)