计划/球拍中的功能。 使用二叉搜索树处理一些函数。我已经将辅助函数定义为:
;; returns value of node
(define (value node)
(if (null? node) '()
(car node)))
;; returns left subtree of node
(define (left node)
(if (null? node) '()
(cadr node)))
;; returns right subtree of node
(define (right node)
(if (null? node) '()
(caddr node)))
我正在尝试编写一个函数size
,它将树作为参数并返回给定树中非空节点的数量
答案 0 :(得分:2)
看起来你很亲密。试试这个(未经测试):
(define (size tree)
(if (null? tree) 0
(+ 1 (size (left tree)) (size (right tree)))))
虽然,就个人而言,我更愿意使用#f
作为空值,而不是'()
。在这种情况下,请在第一行使用not
代替null?
。
答案 1 :(得分:0)
只是另类!! 你可以使用结构,这将减少编写三个函数的工作......
(struct node (val left right) #:transparent)
(struct null-tree ())
并使用构造函数(即谓词和参数访问器)直接编写上述函数。
(define (size tree)
(if (null-tree? tree) 0
(+ 1 (size (left tree)) (size (right tree)))))