(********************************************************************) (* OCaml code from the book ``Learn Programming with OCaml'' *) (* See https://usr.lmf.cnrs.fr/lpo/ *) (* *) (* Sylvain Conchon and Jean-Christophe Filliâtre *) (* Copyright 2025 Université Paris-Saclay and CNRS *) (* *) (* Openly licensed via CC BY SA 4.0 *) (* See https://creativecommons.org/licenses/by-sa/4.0/deed.en *) (********************************************************************) (* Program 36 on page 222 Balancing an AVL Tree *) let balance l v r = let hl = height l in let hr = height r in if hl > hr + 1 then begin match l with Node (ll, lv, lr, _) when height ll >= height lr -> node ll lv (node lr v r) Node (ll, lv, Node (lrl, lrv, lrr, _),_)-> node (node ll lv lrl) lrv (node lrr v r) _ -> assert false end else if hr > hl + 1 then begin match r with Node (rl, rv, rr, _) when height rr >= height rl -> node (node l v rl) rv rr Node (Node(rll, rlv, rlr, _), rv, rr, _) -> node (node l v rll) rlv (node rlr rv rr) _ -> assert false end else node l v r
This document was generated using caml2html