Post 方案中的顺序遍历
Post order traverse in scheme
我正在研究 post 二叉搜索树的顺序遍历。这是我目前所拥有的
(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))))
我希望这段代码可以return一个post顺序的列表遍历。但是它甚至不编译。
错误是
mcar: contract violation
expected: mpair?
given: 5
我检查了 append 和 cons 的语法。我仍然无法弄清楚这个问题。好像逻辑上有问题,而不是语法上有问题。
能否指出并解释一下。谢谢。
append
参数是列表。在您的代码中,您将 head
添加为点值,因此此列表只能包含连续 append
中的最后一个参数。这将解决它:
(define (post-order node)
(if (null? node)
'()
(append (post-order (left node))
(post-order (right node))
(list (head node)))))
我正在研究 post 二叉搜索树的顺序遍历。这是我目前所拥有的
(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))))
我希望这段代码可以return一个post顺序的列表遍历。但是它甚至不编译。 错误是
mcar: contract violation
expected: mpair?
given: 5
我检查了 append 和 cons 的语法。我仍然无法弄清楚这个问题。好像逻辑上有问题,而不是语法上有问题。
能否指出并解释一下。谢谢。
append
参数是列表。在您的代码中,您将 head
添加为点值,因此此列表只能包含连续 append
中的最后一个参数。这将解决它:
(define (post-order node)
(if (null? node)
'()
(append (post-order (left node))
(post-order (right node))
(list (head node)))))