在方案中实现二叉搜索树

时间:2012-10-05 05:48:52

标签: scheme racket

计划/球拍中的功能。 使用二叉搜索树处理一些函数。我已经将辅助函数定义为:

;; 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,它将树作为参数并返回给定树中非空节点的数量

2 个答案:

答案 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)))))