我有以下代码。它旨在以第一种方式遍历[附加屏幕截图]树结构。
正如您所看到的,我对以绿色突出显示的条目感兴趣 - > 具有此树结构的Class(DatasetType)节点。此树结构由客户添加新节点。所以,我必须遍历Tree结构才能找到我感兴趣的节点。我已经制定了以下代码。但我可以看到它确定了我感兴趣的节点。
然而,它并没有停在那里。它正在进入下一个兄弟,即Has Class(EPMJob)。我希望我的处理停止。我很确定我的回归方式缺少一些东西。但无法确定点。
欢迎任何意见。
tag_t findHasTypeDatasetNodeInAMTree( tag_t amTreeNode )
{
CharPointer nodeName;
Response stat = askRuleName( amTreeNode, &nodeName );
CharPointer nodeArgument;
stat = askRuleArg( amTreeNode, &nodeArgument );
if( tc_strcmp( nodeName.getString(), "Has Class" ) == 0 && tc_strcmp( nodeArgument.getString(), "DatasetType" ) == 0 )
{
return amTreeNode;
}
int numChildNodes = 0;
TagPointer childNodes;
stat = askChildren( amTreeNode, &numChildNodes, &childNodes );
if( numChildNodes == 0 )
{
return NULLTAG;
}
// The following is the piece that needs attention.
// Do not want to NULL check here though
for( int inx = 0; inx < numChildNodes; ++inx )
{
findHasTypeDatasetNodeInAMTree( childNodes[inx] );
}
return NULLTAG;
}
答案 0 :(得分:2)
我不确定这是做什么的:
for( int inx = 0; inx < numChildNodes; ++inx )
{
findHasTypeDatasetNodeInAMTree( childNodes[inx] );
}
但是我很确定当你找到某些东西时它不会停止,所以结果总是NULLTAG
。怎么样:
for( int inx = 0; inx < numChildNodes; ++inx )
{
auto result = findHasTypeDatasetNodeInAMTree( childNodes[inx] );
if( result != NULLTAG )
return result;
}