我如何在Scheme中遍历树?

问题描述 投票:0回答:1

我是该计划的新手,我正在尝试学习如何遍历B树。我仅限于来自该语言的某些命令,这使其变得更加复杂。

这是我到目前为止的内容:

(define tree'("R" 100 999
(
 ("R" 100 199
      (
       ("L" 120 140 160 180)
      )
  )

 ("R" 200 299
      (
       ("L" 220 240 260 280)
       )
  )
 )))

(define (treeTraversal a)
  (if(equal? (null? a) #t) 0
  (cdr (treeTraversal (cdr a)))))

(treeTraversal tree)

[当我通过调试器运行它时,它表明它已从列表中移出,首先将第一个“ R”剪掉,然后是100,然后是999,但是从那里开始,列表变为null并在调试器中显示“()”。之后,我得到了错误:

mcdr:违反合同预期:对吗?给定:0

我知道它返回0,因为该函数现在看到一个空列表,但是我不明白为什么列表变为null而不是继续读入嵌套列表。

任何想法和建议都值得赞赏。这是我第一次发布问题,所以请耐心等候:)

recursion scheme racket b-tree
1个回答
0
投票
(define (treeTraversal a)
  (if (null? a)
      #!null
      (if (pair? a)
          (cons (treeTraversal (car a))
                (treeTraversal (cdr a)))
          a)))

将遍历并复制您的树。

© www.soinside.com 2019 - 2024. All rights reserved.