簡體   English   中英

在球拍中創建二進制搜索樹?

[英]create binary search tree in racket?

嘗試創建不可變的二進制搜索樹。 我從創建構造函數開始創建空列表,然后使用以下代碼將元素一一添加到樹中。

#lang racket
(define (constructTree) '())

(define (addToTree Tree k v)

 (cond [(null? Tree)
           (cons Tree cons((cons k  '()) v))]
       [else
        (cond [(>(car Tree) k)
               (cons Tree cons((cons k  '()) v))
               ]
              [else
               (cons Tree '() cons((cons k  '()) v) )
               ]
              )]
      )
)


(define bst (addToTree (addToTree (addToTree (addToTree (constructTree)3 "3") 1 "1") 2 "2") 5 "5"))
bst 

我所說的不可變是指如果我調用(define b0 (constructTree))
b0應該返回'()
(define b1 (addToTree b0 4 "4"))
b1應該返回'(4 "4" () ())
(define b2 (addToTree b1 6 "6"))
b2應該返回'(4 "4" () (6 "6" () ()))
...等等。
但我收到此錯誤: 應用程序:不是過程; 預期可以應用於給定參數的過程:'(3)arguments ...:
任何提示我為什么會收到此錯誤或我做錯了什么? 先感謝您。

我認為您可能正在尋找這樣的東西:

(define emptyTree '())

(define (addToTree Tree k v)
  (match Tree
    ['()
     (list k v '() '())]
    [(list key val left right)
     (if (> k key)
       (list key val left (addToTree right k v))
       (list key val (addToTree left k v) right))]))

請注意,由於具有不變性,因此無需每次都構造一個新的空樹。 您可以將emptyTree用作空列表的別名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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