C# Codeas below:
class Nodes<T>
{
T data;
Nodes<T> Lnode, Rnode;
public T Data
{
set { data = value; }
get { return data; }
}
public Nodes<T> LNode
{
set { Lnode = value; }
get { return Lnode; }
}
public Nodes<T> RNode
{
set { Rnode = value; }
get { return Rnode; }
}
public Nodes()
{ }
public Nodes(T data)
{
this.data = data;
}
public IEnumerator GetEnumerator()
{
//Reserve node
Queue<Nodes<T>> queue = new Queue<Nodes<T>>();
queue.Enqueue(this);
while (queue.Count >0)
{
Nodes<T> node = queue.Dequeue();
yield return node.data;
if (node.Lnode != null)
{
queue.Enqueue(node.Lnode);
}
if (node.Rnode != null)
{
queue.Enqueue(node.Rnode);
}
}
}
}