summaryrefslogtreecommitdiff
path: root/fp1/week7/mart/BinSearchTree.icl
blob: 8f9f05ce4aba808140ffc68d3286d244a02bcc78 (plain) (blame)
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]