2015-02-07 67 views
0

我有一個計劃函數,我有一個列表,我試圖將數字逐個放入二進制搜索樹中。然而,我不斷收到「未指定的返回值」計劃中的二叉搜索樹

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

我知道我的插入函數適用於單個數字。但我需要讓insertB爲列表工作。

+0

你有一個工作'insert'並希望將其應用到整個名單? – 2015-02-07 17:54:55

+0

是的我試圖從數字列表中創建BST – user062495 2015-02-07 17:57:35

回答

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

我認爲這是比較容易理解。這也是更一般的。

+0

我仍然收到未指定的返回值 – user062495 2015-02-07 18:09:49

+1

@SamanthaBewley是的,對不起,現在它已修復。 – 2015-02-07 18:10:20

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