无法退出递归

时间:2015-11-04 17:01:56

标签: c++ recursion tree

我有以下代码。它旨在以第一种方式遍历[附加屏幕截图]树结构。enter image description here

正如您所看到的,我对以绿色突出显示的条目感兴趣 - > 具有此树结构的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;
}

1 个答案:

答案 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;
}