On cherche à implanter un arbre binaire (deux 2 fils max) de recherche (les valeurs sont rangées par ordre croissant)
non mutable (je répète non mutable) générique (qui marche si les valeurs définissent un ordre de comparaison avec elles-mêmes).
On considèrera que
null n'est pas une valeur valide dans l'arbre.
On veux, de plus, qu'il soit impossible de construire un arbre binaire qui n'est pas un arbre binaire de recherche,
pour cela en plus de la valeur (
element) d'un noeud et de ces deux fils, on stockera aussi le maximum (
max)
et le minimum (
min) du sous-arbre correspondant à un noeud.
Par exemple, l'arbre construit comme ceci :
tree("l", tree("f", leaf("a"), leaf("g")), tree("o", leaf("n"), leaf("u")));
est représenté par l'arbre
"l" avec l.min="a" l.max="u"
/ \ f.min="a" f.max="g"
/ \ o.min="n" o.max="u"
/ \ a.min="a" a.max="a"
/ \ g.min="g" g.max="g"
"f" "o" n.min="n" n.max="n"
/ \ / \ u.min="u" u.max="u"
/ \ / \
"a" "g" "n" "u"
Les tests JUnit sont dans la classe
ReadOnlyTreeTest.java.