/ / Prechádzanie binárnym stromom - algoritmus, vyhľadávanie, schéma, binárne-strom, raketa

Prechádzanie binárnym stromom - algoritmus, vyhľadávanie, schéma, binárne-strom, raketa

Mám problémy so zapísaním funkcie chodiťcez binárny strom, funkcia preberá vyhľadávací parameter, zoznam a vráti hodnotu true alebo false. Tu je to, čo mám a je to v podstate tá istá vec, ktorú som našiel pri hľadaní binárneho vyhľadávania v schéme.

(define (tree-lookup val tree)
(if (empty-tree? tree)
#f
(let ((curr-val (node-value tree))
(left (node-left tree))
(right (node-right tree)))
(cond ((equal? val curr-val) #t)
((< val curr-val))
(tree-lookup val left)
(else
(tree-lookup val right))))))

(define tree-test "(((1 2) 3)(4 (5 6)) 7 (8 9 10)))  ; Test tree

Problém nastáva, keď sa snaží porovnaťpremenná "val" s uzlom. To znamená, že porovnávam skutočné číslo so zoznamom, napríklad (<2 "((1 2) 3)). Snažil som sa testovať len na hodnoty atómov, ale potom som prilepený na to, ako sa vrátiť do stromu, lupeňov.

Tu je chybové hlásenie:

  <: contract violation
expected: real?
given: "{{1 2} 3}
argument position: 2nd
other arguments...:
8

odpovede:

2 pre odpoveď č. 1

Na prvý pohľad postup vyzerá dobre. Mám podozrenie, že problém je v node-value, node-left a node-right postupov alebo v spôsobe, akým staviate strom - na začiatok, vzorový strom poskytnutý v otázke sa mi nezdá mi správny.

Premýšľajte o tom, chybové hlásenie signalizuje, že < operátor bol použitý na zoznam "{{1 2} 3}, znamená to že curr-val je zoznam, ale mal by to byť hodnota.