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