CTreeCtrl变量的遍历

树是一种十分重要的数据结构。在程序设计中,我们经常用树来组织数据。对于树的遍历也是一种常规的运算,下面提供了两个算法。前面一个只是简单的遍历了所有的结点,后面一个则可以根据传入条件返回相应的结点。

[Csharp]  view plain copy
  1. /*  
  2.  * 功能:遍历CTreeCtrl所有结点 
  3.  * 参数:tree-要遍历的CTreeCtrl控件变量、hItem-开始变量的根结点(如果要变量整棵树,则:hItem = tree.GetRootItem()) 
  4.  * 返值:void 
  5.  */  
  6. void TravelItem(CTreeCtrl& tree, HTREEITEM hItem)     
  7. {     
  8.     HTREEITEM hCurItem = tree.GetChildItem(hItem);  
  9.     HTREEITEM hNextItem;  
  10.     while(hCurItem)  
  11.     {  
  12.         OutputDebugString(tree.GetItemText(hCurItem));  // 输出结点文本  
  13.   
  14.         hNextItem = hCurItem;  
  15.         TravelItem(tree, hNextItem);  
  16.         hCurItem = tree.GetNextSiblingItem(hCurItem);  
  17.     }  
  18. }  
  19.   
  20.   
  21. /*  
  22.  * 功能:返回指定的树结点 
  23.  * 参数:tree-要遍历的CTreeCtrl控件变量、item-开始变量的根结点(如果要变量整棵树,则:hItem = tree.GetRootItem())、 
  24.      strText-结点的ItemText值(返回条件) 
  25.  * 返值:指定结点的句柄(如果没有符合查找条件的结点,返回NULL) 
  26.  */  
  27. HTREEITEM FindItem(CTreeCtrl& tree, HTREEITEM item, CString strText)  
  28. {  
  29.     HTREEITEM hFind;      
  30.     if(item == NULL)  
  31.         return NULL;  
  32.   
  33.     while(item != NULL)  
  34.     {  
  35.         if(tree.GetItemText(item) == strText)  
  36.             return item;  
  37.   
  38.         if(tree.ItemHasChildren(item))  
  39.         {  
  40.             item = tree.GetChildItem(item);  
  41.             hFind = FindItem(tree, item, strText);        
  42.             if(hFind)  
  43.             {  
  44.                 return hFind;         
  45.             }  
  46.             else  
  47.             {  
  48.                 item= tree.GetNextSiblingItem(tree.GetParentItem(item));  
  49.             }  
  50.         }  
  51.         else  
  52.         {  
  53.             item = tree.GetNextSiblingItem(item);  
  54.             if(item == NULL)  
  55.                 return NULL;  
  56.         }         
  57.     }  
  58.   
  59.     return item;  
  60. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值