RosettaCodeData/Task/Same-fringe/Icon/same-fringe.icon

31 lines
813 B
Plaintext

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