summaryrefslogtreecommitdiff
path: root/tree.sml
diff options
context:
space:
mode:
Diffstat (limited to 'tree.sml')
-rw-r--r--tree.sml20
1 files changed, 20 insertions, 0 deletions
diff --git a/tree.sml b/tree.sml
index ee82485..7209690 100644
--- a/tree.sml
+++ b/tree.sml
@@ -126,6 +126,26 @@ structure Tree: TREE = struct
print' 0 t
end
+ fun traverse Empty _ acc = acc
+ | traverse (Node (k, v, left, right)) f acc =
+ let
+ val acc = traverse left f acc
+ val acc = f k v acc
+ val acc = traverse right f acc
+ in
+ acc
+ end
+
+ fun changeV Empty _ = Empty
+ | changeV (Node (k, v, left, right)) f =
+ let
+ val left = changeV left f
+ val right = changeV right f
+ val v = f v
+ in
+ Node (k, v, left, right)
+ end
+
fun size Empty = 0
| size (Node(_, _, l, r)) = 1 + size l + size r
end