MFC CTreeCtrl类的结点遍历查找
2013-09-04 17:52
141 查看
转载源url不记得了。
CTreeCtrl类的结点遍历查找
1:声名函数原型, HTREEITEM finditem(CTreeCtrl &tree, HTREEITEM startitem, CString strText)
处理流理:
2:定义一个树结点返回值. HTREEITEM rstItem = NULL;
3:首先判断 startitem是否为NULL,如果为NULL的话就返回 if(startitem==NULL) return;
5:如果以上条件都不成立就进入循环_循环条件为startitem不等与NULL,while(startitem != NULL)
6:判断要查找的strText是不是和startitem结点的text相等 if(tree->getitemtext(startitem)==strText) return startitem;
7:首先判断该结点是否有子节点,如果有子节点就先递归查询子节点,否则就查询该节点的兄弟结点。
if( tree->gethaschildren(startitem) )
{
//递归查找子节点
//获取当前节点的子节点
startitem = tree->getchilditem(startitem);
//递归遍历查找子节点上的内容
rstItem = finditem(tree, startitem, strText);
//判断递归的返回值是否为NULL,如果不为NULL的话就表示在子节点中找到了该节点项并返回结点
if(rstItem != NULL)
{ return rstItem; }
else
{
//如果子节点上没有找到和strText内容相等的内容,
//那么就反回到当前结点的兄弟节点上继续返回while处循环查找。
startitem = tree->getnextsublingitem(tree->getParentItem(startitem));
}
}
else
{
//将其下一个兄弟节点做为下个循环查找的起始节点
startitem = tree->getnextsiblingitem(startitem);
}
根具以下流程思路编程算法编写源码:
HTREEITEM finditem(CTreeCtrl &tree, HTREEITEM startItem, CString strText)
{
HTREEITEM rstItem;
if( startItem == NULL ){ return NULL; }
while(startItem != NULL)
{
if(tree->GetItemText(startItem) == strText) { return startItem; }
if(tree->GetHasChildren(startItem))
{
startItem = tree->GetChildItem(startItem);
rstItem = finditem(tree, startItem, strText);
if(rstItem != NULL)
{
return rstItem;
}
else
{
startItem = tree->GetNextSiblingItem(tree->GetParentItem(startItem));
}
}
else
{
startItem = tree->GetNextSiblingItem(startItem);
}//end if(tree->GetHasChildren(startItem))
}//end while(startItem != NULL)
}
CTreeCtrl类的结点遍历查找
1:声名函数原型, HTREEITEM finditem(CTreeCtrl &tree, HTREEITEM startitem, CString strText)
处理流理:
2:定义一个树结点返回值. HTREEITEM rstItem = NULL;
3:首先判断 startitem是否为NULL,如果为NULL的话就返回 if(startitem==NULL) return;
5:如果以上条件都不成立就进入循环_循环条件为startitem不等与NULL,while(startitem != NULL)
6:判断要查找的strText是不是和startitem结点的text相等 if(tree->getitemtext(startitem)==strText) return startitem;
7:首先判断该结点是否有子节点,如果有子节点就先递归查询子节点,否则就查询该节点的兄弟结点。
if( tree->gethaschildren(startitem) )
{
//递归查找子节点
//获取当前节点的子节点
startitem = tree->getchilditem(startitem);
//递归遍历查找子节点上的内容
rstItem = finditem(tree, startitem, strText);
//判断递归的返回值是否为NULL,如果不为NULL的话就表示在子节点中找到了该节点项并返回结点
if(rstItem != NULL)
{ return rstItem; }
else
{
//如果子节点上没有找到和strText内容相等的内容,
//那么就反回到当前结点的兄弟节点上继续返回while处循环查找。
startitem = tree->getnextsublingitem(tree->getParentItem(startitem));
}
}
else
{
//将其下一个兄弟节点做为下个循环查找的起始节点
startitem = tree->getnextsiblingitem(startitem);
}
根具以下流程思路编程算法编写源码:
HTREEITEM finditem(CTreeCtrl &tree, HTREEITEM startItem, CString strText)
{
HTREEITEM rstItem;
if( startItem == NULL ){ return NULL; }
while(startItem != NULL)
{
if(tree->GetItemText(startItem) == strText) { return startItem; }
if(tree->GetHasChildren(startItem))
{
startItem = tree->GetChildItem(startItem);
rstItem = finditem(tree, startItem, strText);
if(rstItem != NULL)
{
return rstItem;
}
else
{
startItem = tree->GetNextSiblingItem(tree->GetParentItem(startItem));
}
}
else
{
startItem = tree->GetNextSiblingItem(startItem);
}//end if(tree->GetHasChildren(startItem))
}//end while(startItem != NULL)
}
相关文章推荐
- 二叉树的输入输出,遍历结果,和双亲结点的查找
- MFC中遍历TreeControl的节点或者查找某个节点
- 可双向并指定开始结点的treeview节点遍历查找方法类
- 二叉树的【深/高度】【度为0/1/2的结点数】【遍历】【查找】【销毁】
- c++遍历查找文件夹路径下的所有文件(比如.txt) 使用的是MFC的CFileFind类
- DOM遍历查找结点
- 单链表的创建和遍历、求单链表中节点的个数、查找单链表中的中间结点、判断单链表是否有环、取出有环链表中环的长度,删除有序链表中的重复结点
- 【链表】查找链表倒数第k个结点,要求只能遍历一次
- 数据结构与算法(十一)二叉树结点的插入/查找
- 单链表---删除无头单链表的非尾结点(不遍历链表)
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 链表操作 对链表进行输入,插入,删除结点,按关键字进行查找操作 C语言
- Shell中遍历整个目录查找某个关键字
- 6.查找单链表中的倒数第k个结点
- 二叉树的各种操作(递归和非递归遍历,树深度,结点个数等等)(Java)
- python 学习记录(11)-文件处理/读取文件/文件写入内容/文件删除/文件复制/文件重命名/后缀名/内容查找与替换/文件比较/ 配置文件访问/目录创建与删除/遍历目录/定向输出
- VC++中遍历整个目录树查找文件
- CMarkup的遍历查找函数
- 查找单链表中倒数第k个结点||旋转单链表
- C++之二叉树的创建、查找、四种次序的周游遍历方法以及内存的释放