首页 > 解决方案 > 在树中创建一个列表

问题描述

它不能正常工作

(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 () ()))) 

标签: schemeracket

解决方案


您在 > 情况下左右交换。试试这个:

(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))))))

推荐阅读