我如何计算树有多少个节点?
;;; A Binary is one of:
;;; - Number
;;; - (make-node BT BT)
(define-struct node (left right))
(define tree1 (make-node (make-node 10 9)
(make-node 3
(make-node 1 5))))
(define (how-many? nd)
(cond
[(number? nd)....]
[(node? n)
(..... (how-many? (node-left nd))
(how-many? (node-right nd)))]))
所以对于tree1我应该
(check-expect (how-many? tree1) 5)
我认为我的模板正确。如果是数字,则应返回1
。但如果它是node
,我应该在虚线中放入什么类型的函数?
答案 0 :(得分:4)
这有点类似于处理列表的方式。区别?现在你将转到每个节点的“左”和“右”,而不是仅仅去“休息”。除此之外,同样的想法适用:
(define (how-many? nd)
(cond
[(number? nd) <???>] ; if it's a leaf, then how many numbers does it have?
[(node? nd)
(<???> (how-many? (node-left nd)) ; how do we combine the results?
(how-many? (node-right nd)))]))
正如我在问题中所看到的那样,你得到了基本案例。递归案例很简单!记住,当我们添加列表中的元素时,我们如何结合结果?这是同样的事情,只是我们结合了左边和右边子树的结果。