列挙子のメソッド MoveNext に問題があります。二分探索木のイテレータが必要です。列挙子のコンストラクターで、ノードをツリーのルートに初期化します。Current は、次の項目のために返すようにした値です。メソッド moveNext のこのコードは、間違った値を返します。
public bool MoveNext()
{
if (Current == null)
Current = node.Value;
else if (node.Left != null)
{
node = node.Left;
Current = node.Value;
}
else if (node.Right != null)
{
node = node.Right;
Current = node.Value;
}
else
{
node.Value = Current;
do
{
if (node.Parent == null)
return false;
node = node.Parent;
} while (node.Right == null);
Current = node.Value;
}
return true;
}