如何在Scheme中遍历一棵树?

时间:2020-04-04 02:42:07

标签: recursion scheme racket b-tree

我是该计划的新手,我正在尝试学习如何遍历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而不是继续读入嵌套列表。

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

1 个答案:

答案 0 :(得分:0)

(define (treeTraversal a)
  (if (null? a)
      #!null
      (if (pair? a)
          (cons (treeTraversal (car a))
                (treeTraversal (cdr a)))
          a)))

将遍历并复制您的树。