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