您的位置:首页 > 其它

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)

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐