forked from lorenzgerber/huffman
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtree_3cell.h
171 lines (147 loc) · 5.08 KB
/
tree_3cell.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
//Written by Johan Eliasson <[email protected]>.
//May be used in the course Datastrukturer och Algoritmer (C) at Umeå University.
//Usage exept those listed above requires permission by the author.
#ifndef __BINARY_TREE_H
#define __BINARY_TREE_H
#include <stdbool.h>
#ifndef __DATA
#define __DATA
typedef void *data;
#endif
#ifndef __MEMFREEDATAFUNC
#define __MEMFREEDATAFUNC
typedef void memFreeFunc(data);
#endif
typedef struct tree_cell {
struct tree_cell *parent;
struct tree_cell *leftChild;
struct tree_cell *rightChild;
data label;
} node;
typedef node * binaryTree_pos;
typedef struct {
binaryTree_pos root;
memFreeFunc *freeFunc;
} binary_tree;
/*
Syfte: Skapa ett nytt binärt träd med en rotnod
Returvärde: pekare till det nyskapade trädet
Kommentarer:
*/
binary_tree *binaryTree_create();
/*
Syfte: Installera en minneshanterare för trädet så att den kan ta över
ansvaret för att avallokera minnet för värdena då de ej finns kvar
i trädet mer.
Parametrar: t - trädet
f - en funktionspekare till en funktion som tar in ett värde
av typen data (void pekare) och avallokerar minnet för värdet
den pekar på (ett av den typ av värden som lagras i trädet).
Kommentarer: Bör anropas direkt efter att trädet skapats om funktionaliteten
ska användas. Trädet funkar även utan att denna funktion anropas,
men det är då upp till användaren av datatypen att avallokera allt
minne för datat som lagras i trädet.
*/
void binaryTree_setMemHandler(binary_tree *l, memFreeFunc *f);
/*
Syfte: Hämta positionen för rotnoden
Parametrar: trädet
Returvärde: positionen för rotnden
Kommentarer:
*/
binaryTree_pos binaryTree_root(binary_tree *tree);
/*
Syfte: Kontrollera om en nod i trädet har ett vänsterbarn
Parametrar: tree - trädet
n - positionen som man vill undersöka om den har ett vänsterbarn
Returvärde: true om et vänsterbarn fanns, false annars
Kommentarer:
*/
bool binaryTree_hasLeftChild(binary_tree *tree,binaryTree_pos n);
/*
Syfte: Kontrollera om ett högerbarn finns till en given nod
Parametrar: tree - trädet
n - positionen som man vill undersöka om den har ett högerbarn
Returvärde: true om et högerbarn fanns, false annars
Kommentarer:
*/
bool binaryTree_hasRightChild(binary_tree *tree,binaryTree_pos n);
/*
Syfte: Hämta högra barnets position för en given nod
Parametrar: tree - trädet
n - positionen vars högerbarn man vill hämta
Returvärde: positionen för högerbarnet
Kommentarer: Ej definierad om ett högerbarn inte finns
*/
binaryTree_pos binaryTree_rightChild(binary_tree *tree,binaryTree_pos n);
/*
Syfte: Hämta vänstra barnets position för en given nod
Parametrar: tree - trädet
n - positionen vars vänsterbarn man vill hämta
Returvärde: positionen för vänsterbarnet
Kommentarer: Ej definierad om ett vänsterbarn inte finn
*/
binaryTree_pos binaryTree_leftChild(binary_tree *tree,binaryTree_pos n);
/*
Syfte: Hämta positionen för föräldern
Parametrar: tree - trädet
n - positionen vars förälder man vill hämta
Returvärde: positionen för föräldern
Kommentarer: Ej definierad för rotnoden
*/
binaryTree_pos binaryTree_parent(binary_tree *tree,binaryTree_pos n);
/*
Syfte: Hämta en nods etikett
Parametrar: tree - trädet
n - positionen för noden
Returvärde: värdet på etiketten
Kommentarer:
*/
data binaryTree_inspectLabel(binary_tree *tree,binaryTree_pos n);
/*
Syfte: Kontrollera om en etikett finns i noden
Parametrar: tree - trädet
n - positionen för noden
Returvärde: true om noden har en ettikett annars false
Kommentarer:
*/
bool binaryTree_hasLabel(binary_tree *tree,binaryTree_pos n);
/*
Syfte: Sätta en etikett för en nod
Parametrar: tree - trädet
label - etiketten för noden
n - positionen för noden
Kommentarer:
*/
void binaryTree_setLabel(binary_tree *tree,data label,binaryTree_pos n);
/*
Syfte: Sätt in ett nytt barn till höger om en nod
Parametrar: tree - trädet
n - positionen för föräldranoden
Returvärde: positionen för den nya noden
Kommentarer: Om ett högerbarn redan fanns kommer detta tas bort.
*/
binaryTree_pos binaryTree_insertRight(binary_tree *tree,binaryTree_pos n);
/*
Syfte: Sätt in ett nytt barn till höger om en nod
Parametrar: tree - trädet
n - positionen för föräldranoden
Returvärde: positionen för den nya noden
Kommentarer: Om ett vänsterbarn redan fanns kommer detta tas bort.
*/
binaryTree_pos binaryTree_insertLeft(binary_tree *tree,binaryTree_pos n);
/*
Syfte: Ta bort en nod ur trädet
Parametrar: tree - trädet
n - positionen för noden
Returvärde: position för föräldranoden till noden som togs bort
Kommentarer: Om noden som ska tas bort har barn kommer även dessa tas bort
*/
binaryTree_pos binaryTree_deleteNode(binary_tree *tree,binaryTree_pos n);
/*
Syfte: Avallokera minnet för trädet
Parametrar: tree - trädet
Kommentarer: efter anropet så är tree ej längre definierat
*/
void binaryTree_free(binary_tree *tree);
#endif