在.Net framework下遍历XML文挡树的两种算法

在阅读ASP.NET_XML深入编程技术 (PDF格式)一书的时候,发现遍历树的两种算法:深度优先和广度优先遍历文挡树,前一种需要使用递归,后者则不需要,本人大学时期数据结构学的不好,每每涉及到树,总喜欢用递归,希望以后能根据需要选用一种,不过没有时间再系统地学习数据结构了,那就平时多学多记吧!
另外这个例子不错,还可以学到.net的XML DOM的一些操作方法.

 1/// <summary>
 2  /// 深度优先遍历文挡树(递归方法)
 3  /// </summary>

 4  /// <param name="currentNode">当前节点</param>

 5  public void DOMDepthFirst(XmlNode currentNode)
 6  
{
 7   XmlNode node =
 currentNode.FirstChild ;
 8   while ( node != null
 )
 9   
{
10
    DOMDepthFirst( node ) ;
11    node =
 node.NextSibling ;
12   }

13
14   //do something else with currentNode herer

15  }

 1  /// <summary>
 2  /// 广度优先遍历文挡树(非递归)
 3  /// </summary>

 4  /// <param name="root">遍历的入口点,如果需要遍历整个文挡则是XmlDocument对象</param>

 5  public void DOMBreadthFirst(XmlNode root)
 6  
{
 7   Queue queue = new
 Queue() ;
 8
   queue.Enqueue(root) ;
 9   XmlNode currentNode = null
 ;
10   try

11   {
12    while (true
)
13    
{
14     //如果queue为空,则抛错,跳出try section,这里是while循环的退出条件

15     currentNode = (XmlNode)queue.Dequeue() ;
16

17     if
 (currentNode.HasChildNodes)
18     
{
19      foreach (XmlNode child in
 currentNode.ChildNodes)
20      
{
21
       queue.Enqueue(child) ;
22      }

23     }

24    }

25   }

26   catch(System.InvalidOperationException ex)
27   
{
28    //throw ex ;

29   }

30  }

31
32

使用方法:
   XmlDocument doc = new XmlDocument() ;
   doc.Load("test.xml") ;
   DOMDepthFirst(doc) ;
   DOMBreadthFirst(doc) ;

posted @ 2006-04-08 11:00  kwklover  阅读(2385)  评论(1编辑  收藏  举报