[英]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.