2012-10-05 6 views
0

구성표/라켓의 기능. 이진 검색 트리를 사용하여 몇 가지 기능을 수행합니다. 이미 수 도우미 기능을 정의 :구성표에 이진 검색 트리 구현

;; returns value of node 
(define (value node) 
    (if (null? node) '() 
     (car node))) 

;; returns left subtree of node 
(define (left node) 
    (if (null? node) '() 
    (cadr node))) 

;; returns right subtree of node 
(define (right node) 
    (if (null? node) '() 
    (caddr node))) 

내가 매개 변수로 나무를 가져 오며 제공된 트리에 null이 아닌 노드의 수를 반환하는 함수 size를 작성하는 것을 시도하고있다

답변

2

그것을 니가 아주 가까이있는 것 같아. 이 (안된) 시도 :

(define (size tree) 
    (if (null? tree) 0 
     (+ 1 (size (left tree)) (size (right tree))))) 

비록 개인적으로, 나는 차라리 오히려 '()보다 널 (null) 값으로 #f를 사용하는 것을 선호합니다. 이 경우 첫 줄에 null? 대신 not을 사용하십시오.

+0

실제로 스타일이 매우 비슷합니다. 계산하는 대신 현재 값이 찾고있는 값인지, 왼쪽 브랜치가 그 값을 포함하고 있는지, 올바른 브랜치가 그 값을 '포함하고 있는지'를 알기 위해 노력하고있다. 말이된다? :-) –

0

그냥 대안! 당신은 ...

(struct node (val left right) #:transparent) 
(struct null-tree()) 

을 세 가지 함수를 작성하는 작업을 줄이고 직접 구조체에 대한 내장 함수를 사용하여 위의 함수, 즉 술어 및 매개 변수 접근을 작성하는 구조체를 사용했을 수 있습니다.

(define (size tree) 
    (if (null-tree? tree) 0 
    (+ 1 (size (left tree)) (size (right tree)))))