为了遍历方案中的树

时间:2015-09-01 13:48:41

标签: tree scheme inorder

我想顺序遍历一个Tree,其节点包含一个整数,如果所有数字都按顺序返回#t,则返回#t(即下一个数字大于或等于前一个数字)。

到目前为止我的尝试

 (define (in-order tree number)  
    (cond [(leaf? tree) (>= leafnumber  number)]
          [(cons? leftsubtree) (in-order leftsubtree leftnumber)]
          [(cons? rightsubtree) (in-order rightsubtree rightnumber)]))

当我切换分支时,我的数字参数似乎是错误的。 我是否需要使用另一个变量来存储这些变量?

1 个答案:

答案 0 :(得分:1)

这是我的建议:

; in-order : tree number -> number or #f
;   if all numbers in the tree are larger than number, then return the maximum number in tree,
;   otherwise 
(define (in-order tree number)
  (cond
    [(leaf? tree)   (if (>= leafnumber  number)
                        leafnumber               ; leafnumber is the largest number in tree
                        #f)]                     ; not all numbers in tree are smaller than number
    [else           (let ([leftnumber (in-order  leftsubtree number)])
                      (let ([rightnumber (in-order rightsubtree leftnumber)])
                        (and leftnumber
                             rightnumber)))]))

(in-order tree -inf.0)