2015-03-10 2 views
0

Целью кодекса была искать ключ (к), и если, замените значение с 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. «привет» должна быть

(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"))) 

Любые предложения, чтобы вызвать выход идти разыскиваемые один?

ответ

2

Здесь

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

вы заменяете все несуществующие поддерево с непустым списком, как показано на этой небольшой тест:

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

Это должно быть

[(empty? tree) empty] 
Смежные вопросы