Scheme中的二进制搜索树

时间:2015-02-07 17:45:10

标签: functional-programming scheme binary-search-tree

我有一个方案函数,我有一个列表,我试图将数字逐个放入二进制搜索树。但是,我一直得到“未指明的返回值”

(define (insertB L)
   (if (not (null? L))
   (begin (let() BST (insert (car L) BST))
   (insertB (cdr L))
   )
   )
)

我知道我的插入功能适用于单个数字。但我需要让insertB用于列表。

2 个答案:

答案 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))
  )
)

我认为它更容易理解。它也更普遍。