EX 2.63

netawater's picture
(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 '()))

;(null? nil) in MIT scheme is true but in guile is false
;(null? '()) both is true.

(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 '() '())

...... full content is only available to community members.

Comments

porco's picture

append是个问题

...... full content is only available to community members.

myself's picture

这是遍历,不是查找!

...... full content is only available to community members.

code17's picture

考虑 append 也很简单,顺便试试 LaTeX

...... full content is only available to community members.

code17's picture

思考题:写出一个 tail-recursive 的 tree-> list

...... full content is only available to community members.