[英]Binary Search tree in Scheme
我有一个计划函数,其中有一个列表,我试图将数字逐一放入二进制搜索树中。 但是,我不断收到“未指定的返回值”
(define (insertB L)
(if (not (null? L))
(begin (let() BST (insert (car L) BST))
(insertB (cdr L))
)
)
)
我知道我的插入功能适用于单个数字。 但是我需要获取insertB才能工作以获取列表。
尝试这个:
(define (insertB BST L)
(if (null? L)
BST
(insertB (insert (car L) BST)
(cdr L))))
最好将BST
作为参数传递,而不要使用全局定义。 除此之外,您必须确保在完成遍历列表时返回修改后的树(基本情况)。 还要注意,在每次递归调用时,我们如何insert
当前元素insert
树中并将其传递,同时我们转到列表中的下一个元素。 如果允许使用更高阶的过程,我们可以编写一个更简单的等效解决方案:
(define (insertB BST L)
(foldr insert BST L))
您可以像这样概括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))
)
)
我认为这更容易理解。 也更一般。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.