Scheme 方案、高度和顺序树。

Scheme 方案、高度和顺序树。,scheme,Scheme,考虑使用方案列表实现二叉树,如下所示 例子: 如果是空树,则高度为0,例如,与树中具有1的节点的子节点一样。对于所有其他节点,其1加上子节点的最大高度。代码的框架可能如下所示: (define (height tree) (if (eq? *tree-null* tree) ... (max (height ...) (height ...)))) 对于postorder,您需要再次遍历: (define (postorder tree)

考虑使用方案列表实现二叉树,如下所示 例子:
如果是空树,则高度为0,例如,与树中具有
1
的节点的子节点一样。对于所有其他节点,其
1
加上子节点的最大高度。代码的框架可能如下所示:

(define (height tree)
  (if (eq? *tree-null* tree)
      ...
      (max (height ...)
           (height ...))))
对于postorder,您需要再次遍历:

(define (postorder tree)
  (if (eq? *tree-null* tree)
      ...
      (append (postorder ...) 
              (porstorder ...) 
              (list (tree-value tree)))))
注意到这两者有多么相似吗?我们可以做一个抽象:

(define (accumulate-tree tree combiner null-value)
  (let rec ((tree tree))
    (if (eq? *tree-null* tree) 
        null-value
        (combiner (tree-value tree)
                  (rec (tree-left tree)) 
                  (rec (tree-right tree))))))

(define (height tree)
  (accumulate-tree tree (lambda (v l r) (+ 1 l r)) 0))

(define (postorder tree)
  (accumulate-tree tree (lambda (v l r) (append l r (list v))) '()))
万一你错过了,它们是很好的免费书。