繁体   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