(define make-empty-tree (lambda () '())) (define make-nonempty-tree (lambda (root left-subtree right-subtree) (list root left-subtree right-subtree))) (define example-tree (make-nonempty-tree 191 (make-nonempty-tree 157 (make-empty-tree) (make-empty-tree)) (make-nonempty-tree 202 (make-nonempty-tree 200 (make-empty-tree) (make-empty-tree)) (make-empty-tree)))) (define empty-tree? null?) (define root car) (define left-subtree cadr) (define right-subtree caddr) (define in? (lambda (value tree) (cond ((empty-tree? tree) #f) ((= value (root tree)) #t) ((< value (root tree)) (in? value (left-subtree tree))) (else ; the value must be greater than the root (in? value (right-subtree tree)))))) (define minimum (lambda (bst) ; given that bst is nonempty (if (empty-tree? bst) (error "But you promised me.....") (if (empty-tree? (left-subtree bst)) (root bst) (minimum (left-subtree bst)))))) (define successor-of-in-or (lambda (value bst if-none) (cond ((empty-tree? bst) if-none) ((<= (root bst) value) (successor-of-in-or value (right-subtree bst) if-none)) (else (successor-of-in-or value (left-subtree bst) (root bst))))))