程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 2.0:使用匿名方法、迭代程序和局部類來創建優雅的代碼(6)

C# 2.0:使用匿名方法、迭代程序和局部類來創建優雅的代碼(6)

編輯:關於C語言

遞歸迭代

當在像二叉樹或其他任何包含相互連接的節點的復雜圖形 這樣的數據結構上進行遞歸迭代時,迭代程序才真正顯示出了它的優勢。通過遞 歸迭代手動實現一個迭代程序是相當困難的,但是如果使用 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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved