树是一种十分重要的数据结构。在程序设计中,我们经常用树来组织数据。对于树的遍历也是一种常规的运算,下面提供了两个算法。前面一个只是简单的遍历了所有的结点,后面一个则可以根据传入条件返回相应的结点。
- /*
- * 功能:遍历CTreeCtrl所有结点
- * 参数:tree-要遍历的CTreeCtrl控件变量、hItem-开始变量的根结点(如果要变量整棵树,则:hItem = tree.GetRootItem())
- * 返值:void
- */
- void TravelItem(CTreeCtrl& tree, HTREEITEM hItem)
- {
- HTREEITEM hCurItem = tree.GetChildItem(hItem);
- HTREEITEM hNextItem;
- while(hCurItem)
- {
- OutputDebugString(tree.GetItemText(hCurItem)); // 输出结点文本
- hNextItem = hCurItem;
- TravelItem(tree, hNextItem);
- hCurItem = tree.GetNextSiblingItem(hCurItem);
- }
- }
- /*
- * 功能:返回指定的树结点
- * 参数:tree-要遍历的CTreeCtrl控件变量、item-开始变量的根结点(如果要变量整棵树,则:hItem = tree.GetRootItem())、
- strText-结点的ItemText值(返回条件)
- * 返值:指定结点的句柄(如果没有符合查找条件的结点,返回NULL)
- */
- HTREEITEM FindItem(CTreeCtrl& tree, HTREEITEM item, CString strText)
- {
- HTREEITEM hFind;
- if(item == NULL)
- return NULL;
- while(item != NULL)
- {
- if(tree.GetItemText(item) == strText)
- return item;
- if(tree.ItemHasChildren(item))
- {
- item = tree.GetChildItem(item);
- hFind = FindItem(tree, item, strText);
- if(hFind)
- {
- return hFind;
- }
- else
- {
- item= tree.GetNextSiblingItem(tree.GetParentItem(item));
- }
- }
- else
- {
- item = tree.GetNextSiblingItem(item);
- if(item == NULL)
- return NULL;
- }
- }
- return item;
- }