Scheme 中的二叉搜索树
Binary Search tree in Scheme
我有一个方案函数,其中有一个列表,我试图将数字一个一个地放入二叉搜索树中。但是,我不断收到 "unspecified return value"
(define (insertB L)
(if (not (null? L))
(begin (let() BST (insert (car L) BST))
(insertB (cdr L))
)
)
)
我知道我的插入功能适用于单个数字。但我需要让 insertB 为列表工作。
你能像这样概括 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))
)
)
我觉得比较容易理解。也比较通用。
试试这个:
(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))
我有一个方案函数,其中有一个列表,我试图将数字一个一个地放入二叉搜索树中。但是,我不断收到 "unspecified return value"
(define (insertB L)
(if (not (null? L))
(begin (let() BST (insert (car L) BST))
(insertB (cdr L))
)
)
)
我知道我的插入功能适用于单个数字。但我需要让 insertB 为列表工作。
你能像这样概括 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))
)
)
我觉得比较容易理解。也比较通用。
试试这个:
(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))