2021-03-12
slides.com/jod/pt_10d
Docent: Jo Devriendt
Assistent: Ann Philips
Coördinator: Joost Vennekens
voornaam.achternaam@kuleuven.be
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
6
4
8
5
2
7
9
3
1
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
#define N 5
int main() {
int waardes[N] = {0,1,2,3,4};
printf("Bouw zoekboom\n");
Node* root = NULL;
for (int i = 0; i < N; ++i) {
root = voegToe(root, waardes[i]);
}
print(root, 0);
root = destroy(root);
}
$ ./a.out
Bouw zoekboom
->4
->3
->2
->1
->0
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
6
4
8
5
2
7
9
3
1
Verschillende hoogte linker- en rechterdeelboom
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
#define N 5
int main() {
int waardes[N] = {0,1,2,3,4};
printf("Bouw zoekboom\n");
Node* root = NULL;
for (int i = 0; i < N; ++i) {
root = voegToe(root, waardes[i]);
}
print(root, 0);
root = destroy(root);
}
$ ./a.out
Bouw zoekboom
->4
->3
->2
->1
->0
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Node* balanceer(Node* t);
void toStack(Node* t, Stack* s);
Node* maak(int waardes[], int lengte);
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
6
4
8
2
7
9
3
1
maak
4
[1]
[6]
2
7
[3]
[8,9]
4
maak
[1,2,3]
[6,7,8,9]
toStack
[1,2,3,4,6,7,8,9]
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
4
[1]
[6]
2
7
[3]
[8,9]
[]
[]
maak
4
2
7
3
1
6
8
9
maak
4
2
7
3
1
6
8
9
maak
4
2
7
[]
[]
[]
[]
[]
[]
[]
[9]
1
3
6
8
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
void toStack(Node* t, Stack* s) {
if (t == NULL) {
return;
}
toStack(t->links, s);
push(s, t->data);
toStack(t->rechts, s);
}
Node* balanceer(Node* t) {
Stack s = create();
toStack(t, &s);
t = destroy(t);
t = maak(s.waardes, s.lengte);
destroyStack(&s);
return t;
}
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Node* maak(int waardes[], int lengte) {
if (lengte == 0) {
return NULL;
}
Node* p = (Node*) malloc(sizeof(Node));
int mid = lengte / 2;
p->data = waardes[mid];
p->links = maak(&waardes[0], mid);
p->rechts = maak(&waardes[mid + 1], lengte - (mid + 1));
return p;
}
Node* balanceer(Node* t) {
Stack s = create();
toStack(t, &s);
t = destroy(t);
t = maak(s.waardes, s.lengte);
destroyStack(&s);
return t;
}
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
#define N 11
int main() {
int waardes[N] = {5,8,4,10,3,1,6,7,9,0,2};
printf("Bouw zoekboom\n");
Node* root = NULL;
for (int i = 0; i < N; ++i) {
root = voegToe(root, waardes[i]);
}
print(root, 0);
printf("Balanceer zoekboom\n");
root = balanceer(root);
print(root, 0);
root = destroy(root);
}
Bouw zoekboom
->10
->9
->8
->7
->6
->5
->4
->3
->2
->1
->0
Balanceer zoekboom
->10
->9
->8
->7
->6
->5
->4
->3
->2
->1
->0
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Node* maakCompleet(Node*);
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021