Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (define (stages tree)
- (define (helper t)
- (if (empty? t)
- '()
- (cons (list (car t))
- (map-append (helper (cadr t))
- (helper (caddr t))))))
- (if (empty? tree)
- #f
- (helper tree)))
- (define (map-append lst1 lst2)
- (cond [(empty? lst1) lst2]
- [(empty? lst2) lst1]
- [else (cons (append (car lst1) (car lst2))
- (map-append (cdr lst1)
- (cdr lst2)))]))
- (define (left tree)
- (cadr tree))
- (define (right tree)
- (caddr tree))
- (define (division tree)
- (define (help tree i) ;где и-значение узла
- (cond
- ( (or(null? tree) (and (null? (right tree)) (null? (left tree)))) false) ; останавливаемся когда дерево или его потомки одновременно пусты
- ( (null? (left tree)) (if (=(remainder i (car (right tree)))0) i (help (right tree) (car (right tree))))) ; если остаток деления узла на кар от правого поддерева
- ( (null? (right tree))(if (= (remainder i (car (left tree)))0) i (help (left tree) (car (left tree))))) ; равен 0 то i,иначе рекурсию.
- ( (or (= (remainder i (car (left tree)))0) (= (remainder i (car (right tree)))0)) i) ; если поддеревья не нулы то все равно нужно спросить
- (else (or (help (left tree) (car (left tree))) (help (right tree) (car (right tree))))))) ;иначе запукаем рекурсию с поддеревьями и и как их первые узлы
- (help tree (car tree))) ;очевидно
- #lang scheme
- (define (left tree)
- (cadr tree))
- (define (right tree)
- (caddr tree))
- (define (minleaf tree)
- (define (help tree i)
- (cond
- ((null? tree) +inf.0) ; по условию если пустое,то беск.
- ((and(null? (left tree)) (null? (right tree))) (min (car tree) i)) ;если лист-то выбираем минимум из i и значения в данном листе
- (else (min (help (left tree) i ) (help (right tree) i))))) ; иначе берем минимум из минимумов левых и правых поддеревьев
- (help tree +inf.0))
- (define (left tree)
- (cadr tree))
- (define (right tree)
- (caddr tree))
- (define (symmetric tree)
- (if (empty? tree)
- '()
- (list (car tree)
- (symmetric (right tree))
- (symmetric (left tree)))))
- (define (left tree)
- (cadr tree))
- (define (right tree)
- (caddr tree))
- (define (lefttrees tree)
- (define (help tree i) ;и-кол-во левых потомков
- (cond ;
- ( (null? tree) i ) ; если дерево пусто-то выдает накопленный и
- ( (not(null? (left tree))) (+ (help (right tree) i) (help (left tree) (+ 1 i) ))) ; если не пустое левое поддерево то запускаем две рекурсии,в одной меняем i
- (else (help (right tree) i)))) ;аесли левое пустое ,то вызываем рекури от правого поддерева
- (define (result e) ; вспомогательная функция нужна для умееньшения результата на единицу
- (+ e ;поскольку он считает корень дерева как за левый потомок
- (help tree 0)))
- (result -1)) ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement