你能不能帮我一个函数,我需要在树中找到前任,但它返回一个空列表,如何在不使用“set!”的情况下返回前一个
(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)))
答案 0 :(得分:0)
由于递归过程的基本情况,它返回空列表。
退出的唯一时间是(null? tree)
为真,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 '()))
它通过每个递归级别维护父级和子树。