(define (arbre:ajoute! T v) (vector-set! T 1 (+ (arbre:taille T) 1)) (let ((i (arbre:taille T))) (vector-set! (arbre:tableau T) i v) (let boucle ((i i)) (if (and (> i 1) (> (vector-ref (arbre:tableau T) i) (vector-ref (arbre:tableau T) (arbre:pere i)))) (begin (arbre:permute! (arbre:tableau T) i (arbre:pere i)) (boucle (arbre:pere i))) T)))) (define (arbre:inserer-sommet! T v) (vector-set! (arbre:tableau T) 1 v) (let boucle ((i 1) (g 2) (d 3)) (if (or (and (<= g (arbre:taille T)) (< (vector-ref (arbre:tableau T) i) (vector-ref (arbre:tableau T) g))) (and (<= d (arbre:taille T)) (< (vector-ref (arbre:tableau T) i) (vector-ref (arbre:tableau T) d)))) (let ((m (if (> d (arbre:taille T)) g (if (< (vector-ref (arbre:tableau T) g) (vector-ref (arbre:tableau T) d)) d g)))) (arbre:permute! (arbre:tableau T) i m) (boucle m (arbre:fils-gauche m) (arbre:fils-droit m)))))) (define (arbre:extraire T) (let ((res (vector-ref (arbre:tableau T) 1)) (nouveau-sommet (vector-ref (arbre:tableau T) (arbre:taille T)))) (vector-set! T 1 (- (arbre:taille T) 1)) (arbre:inserer-sommet! T nouveau-sommet) res))