breadth:(list(tree(int)))list(int)

snoc:(diamond,list(tree(int)),tree(int))list(tree(int))

fun snoc(d,l,t) = match l with 
        nil => cons(d,t,nil(tree(int)))
        |cons(d1,t1,q) => cons(d1,t1,snoc(d,q,t))



fun breadth(q) = match q with
        nil => nil(int)
        |cons(d,t,q) => match t with
                leaf(a) => cons(d,a,breadth(q))
                |node(d1,d2,a,l,r) => cons(d,a,breadth(snoc(d2,snoc(d1,q,l),r)))
