我有一个问题需要完成:
我们可以按列表(root left_subtree)表示非空的二叉树 right_subtree)和空列表中的空树。每个二进制 可以认为具有整数标签的搜索树表示集合 整数。写一个函数,给定一组整数S作为a bst和一个整数x,返回所有整数的集合 比x和大于x的所有整数都是bst的。用一个 对而不是列表来表示结果集。
我对Scheme很新。我使用SML和prolog构建树,但似乎无法掌握我需要为Scheme做什么。任何人都可以帮助我并指导我实现这一目标吗?我的树假设看起来像这样吗?
(列表值左右)
答案 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)))))