Scheme 如何在树中查找前置项

Scheme 如何在树中查找前置项,scheme,Scheme,你能帮我找到一个函数吗?我需要在树中找到前置项,但它返回一个空列表,如何不使用“set”返回前置项 (定义(前置值树) (cond((null?树)(节点树));如果集合为null,则结果为前置 ((>val(节点树))(前置val(右分支树));如果val更大 ((

你能帮我找到一个函数吗?我需要在树中找到前置项,但它返回一个空列表,如何不使用“set”返回前置项

(定义(前置值树)
(cond((null?树)(节点树));如果集合为null,则结果为前置
((>val(节点树))(前置val(右分支树));如果val更大
((由于递归过程的基本情况,它返回空列表。
它唯一退出的时间是
(null?tree)
为真,并且
tree
是您返回到那里的内容

这个怎么样(未经测试)

(定义(前置树val)
(定义(辅助对象子树父级)
(cond((=(节点子树)val)父节点)
((<(节点子树)val)(辅助对象(右分支子树)子树))
(else(辅助对象(左分支子树)子树‘‘‘‘‘‘)
(辅助树“()))

它通过每个递归级别维护父级和子树。

您测试的数据是什么?我不确定你能不能得到一辆空名单的车,就像第一个cond条款那样。
(define (predecessor val  tree)
  (cond ((null? tree) (node tree)) ; If the set is null result is predecessor         
        ((> val (node tree)) (predecessor val (right-branch tree))); if val is greater  
        ((< val (node tree)) (predecessor val (left-branch tree))))) ; if val is lesser 

(define (node tree)
  (car tree))

(define (left-branch tree)
  (cadr tree))

(define (right-branch tree)
  (caddr tree)))
(define (predecessor tree val)
  (define (helper sub-tree parent)
    (cond (((= (node sub-tree) val) parent)
           ((< (node sub-tree) val) (helper (right-branch sub-tree) sub-tree))
           (else (helper (left-branch sub-tree) sub-tree)))))
  (helper tree '()))