走过一棵二叉树

时间:2012-08-23 00:52:44

标签: algorithm search scheme binary-tree racket

我在编写函数以遍历二叉树时遇到问题,该函数接受search_term,list并返回true或false。这就是我所拥有的,这与我发现谷歌搜索如何在Scheme中实现二进制搜索基本相同。

(define (tree-lookup val tree)
  (if (empty-tree? tree) 
      #f
  (let ((curr-val (node-value tree))
    (left (node-left tree))
    (right (node-right tree)))
    (cond ((equal? val curr-val) #t)
      ((< val curr-val))
       (tree-lookup val left)
      (else
       (tree-lookup val right))))))

(define tree-test '(((1 2) 3)(4 (5 6)) 7 (8 9 10)))  ; Test tree

当它试图将“val”变量与节点进行比较时出现问题。这意味着我将实数与列表进行比较,如(&lt; 2'((1 2)3))。我只是尝试测试原子值,但是当我到达一片叶子时,我仍然坚持如何回到树上。

以下是错误消息:

  <: contract violation
  expected: real?
  given: '{{1 2} 3}
  argument position: 2nd
  other arguments...:
  8 

1 个答案:

答案 0 :(得分:2)

乍一看,程序看起来很好。我怀疑问题出在node-valuenode-leftnode-right程序中,或者是您构建树的方式 - 对于初学者来说,问题中提供的示例树并不是'对我来说似乎是正确的。

考虑一下,错误消息表明<运算符已应用于列表'{{1 2} 3},这意味着curr-val是一个列表,但它应该是一个值。