Reputation: 63
It doesn't work properly
(define (tree-insert v t)
(cond((null? t)(make-tree v '() '()))
((eq? v (value t)) t)
((< v (value t)) (make-tree (value t)
(tree-insert v (left t))
(right t)))
((> v (value t)) (make-tree (value t)
(tree-insert v (right t))
(left t)))))
(define (insert-list l t)
(if (null? l)
t
(insert-list (cdr l)
(tree-insert(car l)t))))
(insert-list '(5 2 1 3 11 8 6 9 15 17) '())
; ==> (5 (2 (1 (17 () ()) (8 () ())) (3 (9 () ()) ())) (11 (15 () ()) (6 () ())))
Upvotes: 1
Views: 198
Reputation: 1028
you are swapping left and right in the > case. try this instead:
(define (tree-insert v t)
(cond((null? t)(make-tree v '()'()))
((eq? v (value t)) t)
((< v (value t)) (make-tree (value t)
(tree-insert v (left t))
(right t)))
((> v (value t)) (make-tree (value t)
(left t)
(tree-insert v (right t))))))
Upvotes: 3