2015-03-23 2 views
-1

Я пытаюсь подсчитать дубликат в дереве. Я прикрепляю картинку для лучшей иллюстрации. Я ошибаюсь, у меня нет, куда идти. Вот что я сделалподсчитать повторяющееся значение в древовидной схеме

(define (arbre-insere valeur arbre) 
    (cond ((null? arbre) (list (cons valeur 1) '() '())) 
      ((< valeur(car arbre)) 
       (list (cons (car arbre) count) 
         (arbre-insere valeur (cadr arbre)) 
             (caddr arbre))) 
      (> valeur(car arbre) (list cons ((car arbre) count) (cadr arbre) 
        (arbre-insere valeur (caddr arbre)))) 
      (else 

      ) 
      ))][1] 

enter image description here

+0

Вы, ребёнок, страдаете аллергией на французский язык? : D –

+1

arbre = tree, insere = insert, valeur = value – soegaard

+0

Какое соглашение вы используете для построения дерева? Как выглядит лист? И как выглядит внутренний узел? – soegaard

ответ

1

Вот набросок, где ... и материал в <...> предназначается для заполнения Вами.

(define leaf '()) 

; leaf? : tree -> boolean 
; return #t if the tree is a leaf, 
;   #f otherwise 
(define (leaf? tree) 
    (null? leaf?)) 

; value : tree -> element 
; return the root element of the tree 
(define (value tree) 
    ...) 

; count : tree -> integer 
; return the count of the root element of tree 
(define (count tree) 
    ...) 

; left : tree -> tree 
; return the left subtree of tree 
(define (left tree) 
    ...) 

; right : tree -> tree 
; return the right subtree of tree 
(define (right tree) 
    ...) 

; make-node : value integer tree tree 
; construct tree from a value and count, 
; left is a tree whose elements are smaller than value 
; right is a tree whose elements are greater than value 
(define (make-node value count left right) 
    (list left (cons value count) right)) 

; tree-insert : value tree -> tree 
(define (tree-insert v t) 
    (cond 
    [(leaf? t)  (make-tree v 1 leaf leaf)] 
    [(= v (value t)) (make-tree v <old-count+1> (left t) (right t))] 
    [(< v (value t)) (make-tree v (make-node (value t) (count t) 
               (insert-tree v (left t)) r))] 
    [(> v (value t)) <???>] 
    [else (error 'tree-insert "an unexpected error occurred")])) 
+0

Большое спасибо за этот ответ. Но почему бы вам проверить, является ли дерево пустым, а затем в тесте, если это лист (я думал, что лист является пустым списком как хорошо) –

+0

Хорошая точка. ve удалил тест для пустого дерева. – soegaard

+0

Хорошо, спасибо большое :) –

Смежные вопросы