计划中的过帐顺序遍历

时间:2016-10-13 10:17:50

标签: algorithm tree scheme r5rs postorder

我正在处理二阶搜索树的邮政订单遍历。这就是我到目前为止所拥有的

(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的语法。而我仍然无法弄清楚这个问题。似乎逻辑而不是语法有问题。

你能指出并解释一下吗?谢谢。

1 个答案:

答案 0 :(得分:2)

使用append参数是列表。在您的代码中,您将head添加为虚线值,因此此列表只能删除连续append中的最后一个参数。这会解决它:

(define (post-order node)  
  (if (null? node)
      '()
      (append (post-order (left node))
              (post-order (right node))
              (list (head node)))))