Joe
Joe

Reputation: 63

creating a list into a tree

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

Answers (1)

river
river

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

Related Questions