簡體   English   中英

Scheme中的二叉搜索樹

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM