簡體   English   中英

球拍:在二叉樹中搜索並替換

[英]Racket: search and replace in a binary tree

該代碼的目標是搜索鍵(k),如果找到鍵,則將其替換為v。

(define-struct node (key value left right))

(define (insert k v tree)
  (cond
    [(empty? tree) (list k v) ]
    [(equal? (node-key tree) k) 
     (make-node  k v (insert k v (node-left tree))
                 (insert k v (node-right tree)))]
    [else (make-node (node-key tree) (node-value tree) 
                     (insert k v (node-left tree)) (insert k v (node-right tree)))])) 

(define sample (make-node 2 "two"
                          (make-node 1 "one" empty empty)
                          (make-node 3 "three" empty empty)))

帶有示例和1個“ hello”的輸出應為

(make-node 2 "two"
           (make-node 1 "hello" empty empty)
           (make-node 3 "three" empty empty))

但相反

(make-node 2 "two"
           (make-node 1 "hello"
                      (list 1 "hello")
                      (list 1 "hello"))
           (make-node 3 "three"
                      (list 1 "hello")
                      (list 1 "hello")))

有什么建議可以使輸出達到想要的水平嗎?

這里

[(empty? tree) (list k v)]

您正在用一個非空列表替換每個不存在的子樹,如以下小測試所示:

> (insert 1 "how" empty)
'(1 "how")

它應該是

[(empty? tree) empty]

暫無
暫無

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

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