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