树是一种十分重要的数据结构。在程序设计中,我们经常用树来组织数据。对于树的遍历也是一种常规的运算,下面提供了两个算法。前面一个只是简单的遍历了所有的结点,后面一个则可以根据传入条件返回相应的结点。
/*
* 功能:遍历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;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/smecf/archive/2008/07/24/2707028.aspx