(* BST lookup: e x BST --> boolean add: e x BST --> BST sum: BST --> int remove: e x BST --> BST traverse: BST --> int list variables: BSTs: M,N elements: e,f *) datatype BST = empty | node of int * BST * BST; exception lookupBST; fun lookup(e,empty) = false | lookup(e,node(f,lt,rt)) = if e=f then true else if ef then node(f,lt,remove(e,rt)) else if lt=empty then rt else if rt = empty then lt else let val (a,b)=remMin(rt) in node(a,lt,b) end; val bst1 = empty; val a = sum(bst1); val bst2 = add(5,bst1); val bst3 = add(10,bst2); val b = sum(bst3); val bst4 = remove(10,bst3); val bst5 = add(7,bst4); val t1 = traverse(bst5);