Skip to content

Instantly share code, notes, and snippets.

@yakreved
Created August 29, 2013 13:47
Show Gist options
  • Save yakreved/6378315 to your computer and use it in GitHub Desktop.
Save yakreved/6378315 to your computer and use it in GitHub Desktop.
sicp 2.63
(define (entry tree) (car tree))
(define (left-branch tree) (cadr tree))
(define (right-branch tree) (caddr tree))
(define (make-tree entry left right)
(list entry left right))
(define (tree->list-1 tree)
(if (null? tree)
'()
(append (tree->list-1 (left-branch tree))
(cons (entry tree)
(tree->list-1 (right-branch tree))))))
(define (tree->list-2 tree)
(define (copy-to-list tree result-list)
(if (null? tree)
result-list
(copy-to-list (left-branch tree)
(cons (entry tree)
(copy-to-list (right-branch tree)
result-list)))))
(copy-to-list tree '()))
(define tree1 (make-tree 7
(make-tree 3
(make-tree 1 '() '())
(make-tree 5 '() '()))
(make-tree 9
'()
(make-tree 11 '() '()))))
(define tree2 (make-tree 3
(make-tree 1 '() '())
(make-tree 7
(make-tree 5 '() '())
(make-tree 9
'()
(make-tree 11 '() '())))))
(define tree3 (make-tree 5
(make-tree 3
(make-tree 1 '() '())
'())
(make-tree 9
(make-tree 7 '() '())
(make-tree 11 '() '()))))
(define tree4 (make-tree 5
(make-tree 3
(make-tree 7 '() '())
'())
(make-tree 11
(make-tree 1 '() '())
(make-tree 10 '() '()))))
(tree->list-1 tree1)
(tree->list-2 tree1)
(tree->list-1 tree2)
(tree->list-2 tree2)
(tree->list-1 tree3)
(tree->list-2 tree3)
(tree->list-1 tree4)
(tree->list-2 tree4)
;Эти процедуры делают одно и то-же, просто одна итеративная со сложностью О(n), другая рекурсивная с логарифмической сложностю.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment