遞歸迭代
當在像二叉樹或其他任何包含相互連接的節點的復雜圖形 這樣的數據結構上進行遞歸迭代時,迭代程序才真正顯示出了它的優勢。通過遞 歸迭代手動實現一個迭代程序是相當困難的,但是如果使用 C# 迭代程序,這將 變得很容易。請考慮圖 6 中的二叉樹。這個二叉樹的完整實現是本文所提供的源 代碼的一部分。這個二叉樹在節點中存儲了一些項。每個節點均擁有一個一般類 型 T(名為Item)的值。每個節點均含有指向左邊節點的引用和指向右邊節點的 引用。比 Item 小的值存儲在左邊的子樹中,比 Item 大的值存儲在右邊的子樹 中。這個樹還提供了 Add 方法,通過使用參數限定符添加一組開放式的 T 類型 的值:
Figure 6Implementing a Recursive Iterator
class Node<T>
{
public Node<T> LeftNode;
public Node<T> RightNode;
public T Item;
}
public class BinaryTree<T>
{
Node<T> m_Root;
public void Add(params T[] items)
{
foreach(T item in items)
Add (item);
}
public void Add(T item)
{...}
public IEnumerable<T> InOrder
{
get
{
return ScanInOrder(m_Root);
}
}
IEnumerable<T> ScanInOrder(Node<T> root)
{
if(root.LeftNode != null)
{
foreach(T item in ScanInOrder(root.LeftNode))
{
yIEld return item;
}
}
yIEld return root.Item;
if(root.RightNode != null)
{
foreach(T item in ScanInOrder(root.RightNode))
{
yIEld return item;
}
}
}
}
圖 6