2015-09-01 4 views
2

Я хотел бы пройти inorder через дерево, узлы которого содержат целое число и возвращают #t, если все числа в порядке (то есть следующее число больше или равно предыдущему числу).Для обхода дерева по схеме

Моя попытка до сих пор

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

Как-то мои аргументы число, кажется, неправильно, когда я переключаюсь ветви. Нужно ли использовать другую переменную для их хранения?

ответ

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) 
+0

Как работает и будет работать, если leftnumber это число и rightnumber является логическим или другим способом? – JennyToy

Смежные вопросы