【问题标题】:Racket: search and replace in a binary treeRacket:在二叉树中搜索和替换
【发布时间】:2015-05-11 13:09:14
【问题描述】:

代码的目标是搜索键 (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")))

有什么建议可以让输出达到想要的效果吗?

【问题讨论】:

    标签: search tree scheme binary-tree racket


    【解决方案1】:

    这里

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

    您正在用一个非空列表替换每个不存在的子树,如以下小测试所示:

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

    应该是

    [(empty? tree) empty]
    

    【讨论】:

      猜你喜欢
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      相关资源
      最近更新 更多