二进制树以球拍的顺序列出

时间:2014-11-22 19:57:52

标签: functional-programming scheme binary-tree racket postorder

您好我正在尝试将二叉树转移到列表中,但是在后续订单中将其交叉。

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

但是我收到了这个错误:

cdr:合同违规 预期:对? 给定:'null

但是例如这个树:'((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 null)null)) 然后我把车开到这个结果:'((7 10)((2 4)null null))如果它是一对。所以我不明白出了什么问题。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

if表达式具有for (if e0 e1 e2),其中e0,e1和e2是表达式。 在您的计划中,您有:

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

这意味着如果e0为真,则评估('() ...)

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

表达式('() ...)将尝试使用'()的结果调用..., 因此给出错误。

修正此错误,希望您的其他错误消失 - 如果没有告诉我们您的情况并再次提问。