方案,身高和pstorder树。

时间:2017-02-21 08:52:42

标签: scheme

考虑使用Scheme列表实现二叉树,如下所示 例: tree< ------------------------------------------- ----------------------------------------

1)树的高度定义为路径上的最大节点数 一根叶子的根。写一个递归函数(高度T)

  

(身高T)   4

2)写一个递归函数(postorder T),它返回所有的列表 树T中的元素对应于树的后序遍历。

  

(后序T)   (1 9 8 5 17 25 22 13)

对于第一个:我只能获得总节点,但不能获得高度。 第二个我不知道该怎么做。

本周从C ++开始计划

任何提示或解决方案?

1 个答案:

答案 0 :(得分:0)

如果它是空树,则高度为0,例如。比如树中1节点的子节点。对于所有其他节点,其1加上子节点的最大值。代码的框架可能如下所示:

(define (height tree)
  (if (eq? *tree-null* tree)
      ...
      (max (height ...)
           (height ...))))

对于后期订单,您需要再次遍历:

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