二进制搜索树来计算完整类的数量

时间:2015-11-24 18:40:20

标签: scheme binary-search-tree

我使用带有列表缩写的开头语言

我希望我的程序要做的就是消耗BST(课程)和自然数(上限)并生成课程 这是完整的。如果课程中至少有学生注册

,则认为课程已满

这是我到目前为止所做的:

BST为空或

(make-node Nat (listof Nat) BST BST), 

以递归方式满足排序属性:

左边的每个course-id都小于course-id

右边的每个course-id都大于course-id

要求:

10000< course-id< = 99999

studlist中的每个元素都在100000000和999999999之间

包含,代表

学生的ID

参加课程。

(define-struct node (key val left right))

辅助函数,用于计算班级中学生的数量:

(define (count-students alist)    
 (cond
    [(empty? alist) 0]

    [(cons? (car alist))(+(count-students(car alist))
                          (count-students(cdr alist)))]
            [else(+ 1(count-students(cdr alist)))]))

主要功能:

(define (count-full-courses courses cap)
 (cond
    [(empty? courses)0 ]

    [else (cond
             [(or (=(count-students(node-val courses))cap)
                  (>(count-students(node-val courses))cap))(add1(+
                                                              (count-full-courses (node-left courses)cap)
                                                              (count-full-courses (node-right courses)cap)))]

应该发生什么的例子:

(define c89761 (make-node 89761 (list 987654321 673498453 237622334) empty empty))

(define c99800 (make-node 99800 (list 673498453 673498453 876542334 777777777)empty empty))

(define c99500 (make-node 99500 (list 987654321 673498453 673498453 876542334)empty c99800))

(define c99999 (make-node 99999 (list 987654321 673498453 444444444)c99500 empty))

(define DB     (make-node 99065 (list 123456789 987654321 673498453 876542334)c89761 c99999))

(count-full-courses DB 4) should produce 3

1 个答案:

答案 0 :(得分:0)

没关系我弄清楚了,我只需要更多基础案例。