2015-11-04 94 views
0

我有以下一段代码。它旨在首先深入遍历[附加截图] Tree结构。您可以看到,我感兴趣的是突出显示的绿色条目 - >Has 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; 
} 

回答

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