2013-08-21 4 views
0

숫자와 이진 트리를 입력하고 숫자와 같은 깊이의 이진 트리에서 데이터 식을 출력하는 구성표 함수를 평가해야합니다. 예를 들어 트리의 루트는 1이고 서브 트리의 루트는 2 등입니다.스키마에서 이진 트리를 계속 평가하는 방법

이것은 내가 지금까지 가지고 있으며 오류 메시지가 계속 나타납니다. Error in null?: expected a list; got '1'. (이것은 이전에 요청한 문제를 해결하는 또 다른 방법입니다.) 내가 이미 사용했던 용어를 사용하여 이것을 설명 할 수 있습니까? 계획안 프로그래밍에 익숙하지 않습니다.

은 여전히 ​​가져 표현을 다시 인수를 전달하는 잘못된 순서로 재귀 당신에게

(define fetch-exp (λ (n bt) 
    (cond [(not (deep-enough? n bt)) ▽#f] 
     [(one? n) (root bt)] 
     [(deep-enough? n (left-tree bt)) 
     (fetch-exp (left-tree bt) (sub1 n))] 
     [(deep-enough? n (right-tree bt)) 
     (fetch-exp (right-tree bt) sub1 n)] 
     [else ▽#f]))) 

(define deep-enough? 
(λ (n bt) 
    (cond [(> (tree-depth bt) n) ▽#t] 
     [(equal? (tree-depth bt) n) ▽#t]  
     [else ▽#f]))) 

답변

0

감사드립니다. 새로운 n의 값, 새로운 트리의 값.

잠재적으로 트리 깊이를 충분히 깊은 곳에서 두 번 호출 할 가능성이 있습니까?

(define deep-enough? 
(λ (n bt) 
    (if (>= (tree-depth bt) n) 
     true 
     false))) 

수정이

그러나 깊이를 계산하기 위해 별도의 기능을 가질 필요가 없습니다 다른 질문에 대한 내 대답 좀 봐. 되돌릴 수있는 기능으로 트래버스하기 만하면됩니다. (호출자에게 오류 신호를 보내고 유효한 경로가 아직 시도되지 않은 경우 호출자에게 다른 경로를 시도하게하십시오)

관련 문제