对二元搜索树感到困惑(Scheme)

时间:2013-12-07 03:43:34

标签: scheme

我有一个问题需要完成:

  

我们可以按列表(root left_subtree)表示非空的二叉树   right_subtree)和空列表中的空树。每个二进制   可以认为具有整数标签的搜索树表示集合   整数。写一个函数,给定一组整数S作为a   bst和一个整数x,返回所有整数的集合   比x和大于x的所有整数都是bst的。用一个   对而不是列表来表示结果集。

我对Scheme很新。我使用SML和prolog构建树,但似乎无法掌握我需要为Scheme做什么。任何人都可以帮助我并指导我实现这一目标吗?我的树假设看起来像这样吗?

(列表值左右)

1 个答案:

答案 0 :(得分:1)

是的,这是定义树的一种方法。只要你做了一个正确的ADT并且一直使用它,在你定义它之后就没关系了。

(define (make-tree root left right) 
  (list root left right))

(define (right tree)
 (caddr tree))

(define (left tree)
 (cadr tree))

(define (root tree)
 (car tree))

(define (empty-tree? tree)
  (null? tree))

(define empty-tree '())

(define (leaf? tree)
 (and (empty-tree? (left tree)) (empty-tree? right tree)))

(define (split-tree-at tree x)
 (let ((less ...)
       (more ...))     
  (cons less more))

(define (in-tree-below-x tree x) ;;assuming a sorted tree
  (cond ((empty-tree? tree) (empty-tree))
        ((>= (root tree) x)
         (in-tree-below (left tree) x))
        (else (make-tree (root tree) 
                         (left tree)
                         (in-tree-below-x (right tree) x)))))