如何在树中找到前任

时间:2014-11-23 00:35:08

标签: scheme

你能不能帮我一个函数,我需要在树中找到前任,但它返回一个空列表,如何在不使用“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)))

1 个答案:

答案 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 '()))

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