• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
thankgoodness
博客园    首页    新随笔    联系   管理    订阅  订阅

如何对CTreeCtrl遍历和查找

VC编程中,若要展现一个树形结构,我们基本都会继承CTreeCtrl进行扩展。通过InsertItem、SetItemData等操作可以建立起一颗树并展现出来。对树的操作,最常用的就是遍历和查找。如何遍历一个CTreeCtrl呢,以下是采用递归完成的遍历树的函数

   
遍历树   
//hitem:待遍历树的根节点

void  TreeVisit(HTREEITEM   hItem) 

{    

    AfxMessageBox(GetItemText(hItem));       

  if(ItemHasChildren(hItem))     

  { 

   HTREEITEM   hChildItem = GetChildItem(hItem);     

   while(hChildItem!=NULL)     

   { 

     TreeVisit(hChildItem); //递归遍历孩子节点     

     hChildItem  = GetNextItem(hChildItem, TVGN_NEXT);     

   }     

  }                                            

} 

 

如何根据名称查找树中的某个节点

//item:待遍历树的根节点,strtext:待查找节点名称

HTREEITEM   finditem(HTREEITEM  item, CString strtext)   

{  

   HTREEITEM  hfind;  

 

   //空树,直接返回NULL

   if(item ==  NULL)  

      return  NULL;  

 

   //遍历查找

   while(item!=NULL)  

   {  

      //当前节点即所需查找节点

      if(GetItemText(item) == strtext)  

         return   item;  

     

      //查找当前节点的子节点

      if(ItemHasChildren(item))  

      {  

         item   =   GetChildItem(item); 

         //递归调用查找子节点下节点

         hfind   =   finditem(item,strtext);  

         if(hfind)  

         {  

            return  hfind;  

         }  

         else   //子节点中未发现所需节点,继续查找兄弟节点

         item = GetNextSiblingItem(GetParentItem(item));  

 

      }  

      else{   //若无子节点,继续查找兄弟节点

         item = GetNextSiblingItem(item);  

      }  

   }  

 

   return item;  

}

 

这两个函数均在CTreeCtrl的扩展类当中做为成员函数即可实现树的遍历和查找。

两个函数遍历的实质是相同的:先查找第一个子节点,再查找以该节点为根的子树,再逐个查找该子节点的兄弟节点,最终完成遍历。第二个函数在找到符合条件的节点时即返回,而第一个函数则访问了树的所有节点。

 

这两个函数均在CTreeCtrl的扩展类当中做为成员函数即可实现树的遍历和查找。

两个函数遍历的实质是相同的:先查找第一个子节点,再查找以该节点为根的子树,再逐个查找该子节点的兄弟节点,最终完成遍历。第二个函数在找到符合条件的节点时即返回,而第一个函数则访问了树的所有节点。

两个函数均在VC60环境下编译运行通过。

posted @ 2009-02-23 11:06  宇晨  阅读(1685)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3