在.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 @   kwklover  阅读(2387)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示