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))) '()))
万一你错过了,它们是很好的免费书。