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
|
implementation module BinSearchTree
import StdEnv
import BinTree
z0
Leaf
z1
50
|
----------
| |
Leaf Leaf
z2
50
|
----------
| |
10 Leaf
|
------
| |
Leaf Leaf
z3
50
|
----------
| |
10 75
| |
------ ------
| | | |
Leaf Leaf Leaf Leaf
z4
50
|
----------
| |
10 75
| |
------ ------
| | | |
Leaf Leaf Leaf 80
|
------
| |
Leaf Leaf
z5
50
|
----------
| |
10 75
| |
------ ------
| | | |
Leaf Leaf Leaf 77
|
------
| |
Leaf 80
|
------
| |
Leaf Leaf
z6
50
|
----------
| |
10 75
| |
------ ------
| | | |
10 Leaf Leaf 77
| |
------ ------
| | | |
Leaf Leaf Leaf 80
|
------
| |
Leaf Leaf
z7
50
|
----------
| |
10 75
| |
------ -----------
| | | |
10 Leaf 75 77
| | |
------ ------ ------
| | | | | |
Leaf Leaf Leaf Leaf Leaf 80
|
------
| |
Leaf Leaf
z8
// Uit het diktaat, blz. 73:
insertTree :: a (Tree a) -> Tree a | Ord a
insertTree e Leaf = Node e Leaf Leaf
insertTree e (Node x le ri)
| e <= x = Node x (insertTree e le) ri
| e > x = Node x le (insertTree e ri)
deleteTree :: a (Tree a) -> (Tree a) | Eq, Ord a
deleteTree e Leaf = Leaf
deleteTree e (Node x le ri)
| e < x = Node x (deleteTree e le) ri
| e == x = join le ri
| e > x = Node x le (deleteTree e ri)
where
join :: (Tree a) (Tree a) -> (Tree a)
join Leaf b2 = b2
join b1 b2 = Node x b1` b2
where
(x,b1`) = largest b1
largest :: (Tree a) -> (a,(Tree a))
largest (Node x b1 Leaf) = (x,b1)
largest (Node x b1 b2) = (y,Node x b1 b2`)
where
(y,b2`) = largest b2
is_geordend :: // meest algemene type
is_geordend ...
Start = map is_geordend [t0,t1,t2,t3,t4,t5,t6,t7]
is_gebalanceerd :: // meest algemene type
is_gebalanceerd ...
//Start = map is_gebalanceerd [t0,t1,t2,t3,t4,t5,t6,t7]
|