首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CPSed二叉树遍历不像预期的那样工作

CPSed二叉树遍历不像预期的那样工作
EN

Stack Overflow用户
提问于 2015-09-24 06:53:00
回答 1查看 56关注 0票数 1

我的递归版本看起来像

代码语言:javascript
复制
(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版本

代码语言:javascript
复制
(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的结果如预期的15countk则得到4

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-24 08:00:13

您忘记将递归结果传递给延续:

代码语言:javascript
复制
(define (countk tree k)
  (if (null? tree)
      (k 0)
      (countk (node-left tree)
              (λ (lval)
                (countk (node-right tree)
                        (λ (rval)
                          (k (+ (node-val tree) lval rval))))))))
                           ^
                          Here

记住这一点之后,您将得到一个运行时错误,因为结果不是树。

这在您的代码中没有发生,因为您的初始延续从未应用于任何东西。

你应该这样称呼它:

代码语言:javascript
复制
(countk t1 (λ (x) x))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32755126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档