10b. Expressieboom
2021-03-12
slides.com/jod/pt_10b
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
Expressiebomen
Veel taal-expressies hebben een onderliggende boomstructuur, ook wel abstract syntax tree genoemd
geeft aan
Archibald
wisselgeld
en
de bakker
hem
koopt
een brood
||
!
=
int x
z
y
Nodig om ambiguïteit te voorkomen:
int x = !y||z <-> int x = !(y||z)
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Binaire expressieboom
*
3
+
1
8
typedef struct node {
char operatie;
int waarde;
struct node* links;
struct node* rechts;
} Node;
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Door de boom wandelen
*
3
+
1
8
-
inorder
- links -> node -> rechts
- 1+3*8
-
preorder
- node -> links -> rechts
- +1*38
-
postorder
- links -> rechts -> node
- 138*+
Betekenis van expressie verandert niet!
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Door de boom lopen
typedef struct node {
char operatie;
int waarde;
struct node* links;
struct node* rechts;
} Node;
void print(Node* n){
if(operatie!='0'){
printf("%c",operatie);
}else{
printf("%d",waarde);
}
}
void inorder(Node* n){
if(n!=NULL){
inorder(n->links);
print(n);
inorder(n->rechts);
}
}
void preorder(Node* n){
if(n!=NULL){
print(n);
preorder(n->links);
preorder(n->rechts);
}
}
void postorder(Node* n){
if(n!=NULL){
postorder(n->links);
postorder(n->rechts);
print(n);
}
}
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Oefeningen
- Schrijf code die de uiteindelijk waarde van zo'n aritmetische binaire expressieboom berekent. Lukt het met elke manier om door de boom te lopen? Welke manier lijkt het handigst?
- Wat als je de unaire operatie 'min' (bvb. -7) toelaat?
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Samenvatting
- Expressiebomen tonen onderliggende structuur aan van expressies
- Binaire bomen worden typisch op 3 manieren doorlopen:
- inorder
- preorder
- postorder
10b. Expressiebomen
By Jo Devriendt
10b. Expressiebomen
- 650