1
Моя рекурсивная версия выглядитCPSed бинарное дерево обхода не работает, как ожидалось
(struct node (val left right) #:transparent)
(define t3 (node 3 '() '()))
(define t4 (node 4 '() '()))
(define t5 (node 5 '() '()))
(define t2 (node 2 t4 t5))
(define t1 (node 1 t2 t3))
;
; ----- 1 -----
; | |
; -- 2 -- 3
;| |
;4 5
(define (countv tree)
(if (null? tree)
0
(+ (node-val tree)
(countv (node-left tree))
(countv (node-right tree)))))
(countv t1)
И CPSed версии
(define (countk tree k)
(if (null? tree)
(k 0)
(countk (node-left tree)
(λ (lval)
(countk (node-right tree)
(λ (rval)
(+ (node-val tree) lval rval)))))))
(countk t1 (λ (x) (node-val x)))
Результат countv
был 15
, как и ожидалось, в то время как countk
получил 4
.
Также используйте '(countk t1 (λ (х) х))' как обработка по умолчанию результата, а не '(countk t1 (λ (х) (node-val x))). Вы также можете использовать '(k 0) (k (countk (node-left ....' –
@ReutSharabani Я добавил правильное начальное продолжение, но передача результата 'countk' в продолжение' k' неверна . – molbdnilo
@molbdnilo благодарит за меня: – liweijian