我正在处理二阶搜索树的邮政订单遍历。这就是我到目前为止所拥有的
(define (head tree)
(car tree))
(define (left tree)
(cadr tree))
(define (right tree)
(caddr tree))
(define (post-order node)
(if (null? node)
'()
(append (cons (post-order (left node))
(post-order (right node)))
(head node))))
我希望这段代码可以返回一个帖子顺序遍历列表。但它甚至没有编译。 错误是
mcar: contract violation
expected: mpair?
given: 5
我检查了append和cons的语法。而我仍然无法弄清楚这个问题。似乎逻辑而不是语法有问题。
你能指出并解释一下吗?谢谢。
答案 0 :(得分:2)
使用append
参数是列表。在您的代码中,您将head
添加为虚线值,因此此列表只能删除连续append
中的最后一个参数。这会解决它:
(define (post-order node)
(if (null? node)
'()
(append (post-order (left node))
(post-order (right node))
(list (head node)))))