1

嗨,我正在尝试将二叉树转移到列表中,但在后序中交叉。

(define (postorden arbol)
  (if (null? arbol) 
    ('()) (append (append (postorden (car (cdr arbol))) 
                          (postorden (car (cddr arbol)))) 
                  (list (car arbol)))))

但我得到这个错误:

cdr:预期违反合同:对?给定:'空

但是例如对于这棵树:'((1 2) ((7 10) ((2 4) null null)) ((6 8) ((10 13) null null) null))

执行 cdr 并得到: (((7 10) ((2 4) null null)) ((6 8) ((10 13) null nul) null)) 然后我把车开到这个结果:'(( 7 10) ((2 4) null null)) 如果它是一对。所以我不明白出了什么问题。

先感谢您。

4

1 回答 1

1

表达式具有iffor(if e0 e1 e2)其中 e0,e1,and,e2 是表达式。在您的程序中,您有:

(if e0
    ('() ...)
    e2)

这意味着如果 e0 为真,则('() ...)计算。

'()是空列表,也称为null

该表达式('() ...)将尝试'()使用 的结果进行调用...,从而给出错误。

修复此错误,希望您的其他错误消失 - 如果不向我们展示您的问题并再次询问。

于 2014-11-22T20:43:40.863 回答