procedure main() aTree := [1, [2, [4, [7]], [5]], [3, [6, [8], [9]]]] bTree := [1, [2, [4, [7]], [5]], [3, [6, [8], [9]]]] write("aTree and bTree ",(sameFringe(aTree,bTree),"have")|"don't have", " the same leaves.") cTree := [1, [2, [4, [7]], [5]], [3, [6, [8]]]] dTree := [1, [2, [4, [7]], [5]], [3, [6, [8], [9]]]] write("cTree and dTree ",(sameFringe(cTree,dTree),"have")|"don't have", " the same leaves.") end procedure sameFringe(a,b) return same{genLeaves(a),genLeaves(b)} end procedure same(L) while n1 := @L[1] do { n2 := @L[2] | fail if n1 ~== n2 then fail } return not @L[2] end procedure genLeaves(t) suspend (*(node := preorder(t)) == 1, node[1]) end procedure preorder(L) if \L then suspend L | preorder(L[2|3]) end