我有一个方案函数,我有一个列表,我试图将数字逐个放入二进制搜索树。但是,我一直得到“未指明的返回值”
(define (insertB L)
(if (not (null? L))
(begin (let() BST (insert (car L) BST))
(insertB (cdr L))
)
)
)
我知道我的插入功能适用于单个数字。但我需要让insertB用于列表。
答案 0 :(得分:3)
试试这个:
(define (insertB BST L)
(if (null? L)
BST
(insertB (insert (car L) BST)
(cdr L))))
如果我们将BST
作为参数传递,而不是使用全局定义,那就更好了。除此之外,当我们完成遍历列表(基本情况)时,您必须确保返回修改后的树。还要注意在每次递归调用时我们insert
树中的当前元素并将其传递,同时我们转到列表中的下一个元素。如果允许更高阶的过程,我们可以编写一个更简单的等效解决方案:
(define (insertB BST L)
(foldr insert BST L))
答案 1 :(得分:1)
你可以像这样推广BST
参数吗?
(define (insertB L BST)
(if (not (null? L))
(insertB (cdr L) (insert (car L) BST))
BST
)
)
或同等的:
(define (insertB L BST)
(if (null? L)
BST
(insertB (cdr L) (insert (car L) BST))
)
)
我认为它更容易理解。它也更普遍。