algorithm - 遍历二叉树

标签 algorithm search scheme binary-tree racket

我在编写遍历二叉树的函数时遇到问题,该函数接受 search_term、列表并返回 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”变量与节点进行比较时,问题就来了。这意味着我将实数与列表进行比较,例如 (< 2 '((1 2) 3))。我尝试只测试原子值,但后来我陷入了如何在到达叶子时返回树上的问题。

这是错误信息:

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

最佳答案

乍一看,该过程看起来不错。我怀疑问题出在 node-value , node-leftnode-right程序,或者你构建树的方式 - 对于初学者来说,问题中提供的示例树对我来说似乎不正确。

想想看,错误消息表示 <运算符已应用于列表 '{{1 2} 3} ,意思是 curr-val是一个列表,但它应该是一个值。

关于algorithm - 遍历二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12083360/

相关文章:

c++ - 应用考虑特定边缘子集的算法

algorithm - 排序列表以简化二叉树的构造

algorithm - 如何计算n的分区数?

c - 数组的迭代/递归搜索

scripting - Scheme中如何调用外部命令?

list - 将数字转换为英文字母列表

java - Big O 用于有限的、固定大小的可能值集

string - 多次出现的KMP算法

asp.net - ASP.NET 应用程序中的 Google 桌面或索引文本文件搜索

lisp - SICP car/cdr练习题问题