>>49
> イテレータの実装を考えると再帰はちょっと無理があるんじゃないかと思う。
問題はデータ構造の方じゃなくて言語の方だと思う。
というのも、yieldを持つ言語なら再帰を使ったやり方が最も簡潔に書けるから。

-- language:lua
function traverse(node)
 if node then
  traverse(node.left)
  coroutine.yield(node.value)
  traverse(node.right)
 end
end

co = coroutine.create(traverse)
not_end, value = coroutine.resume(co, node)