Более эффективное решение:
local
fun helper Leaf result = result
| helper (Branch (el, left, right)) result = helper left (helper right (el::result))
in
fun createList tree = helper tree nil
end
Это более эффективно, потому что @
должен полностью развернуть свой левый аргумент, чтобы добавить его к правому аргументу, что становится очень дорого, если вы неоднократно применяете его для более длинных и длинных списков. В отличие от этого, с помощью функции helper
, которая предшествует обходу пост-заказа поддерева в переданный список, вы можете создать весь список только один раз.