type 'a avl = Empty | Node of int * 'a avl * 'a * 'a avl

let rec fold_bfs f acc ar =
  match ar with
    Empty -> acc
  | Node (alt,Empty,a,Empty) -> f acc a
  | Node (alt,Node (alte,ee,b,de),a, Node(altd,ed,c,dd)) ->  
     let resa = f acc  a in
     let resb = f resa b in
     let resc = f resb c in
     let resee= fold_bfs f resc ee in
     let resde= fold_bfs f resee de in
     let resed= fold_bfs f resde ed in
     fold_bfs f resed dd 
  | Node (alt,Empty,a, Node(altd,ed,b,dd)) -> 
     let resa = f acc  a in
     let resb = f resa b in
     let resed= fold_bfs f resb ed in
     fold_bfs f resed dd  
  | Node (alt,Node (alte,ee,b,de),a, Empty) ->    
     let resa = f acc  a in
     let resb = f resa b in
     let resee= fold_bfs f resb ee in
     fold_bfs f resee de 

This document was generated using caml2html