我正在尝试编写的这个递归xml遍历函数确实正确访问每个节点/元素/标记,并且它在测试期间确实传递了基本情况if语句。它不做的是在函数完成展开后保持正确的返回节点。由于某些原因,主程序移动到下一行时,我的结果总是为NULL。我是递归的新手,所以希望这是一个简单的错误..
TiXmlNode* findNode(TiXmlNode* startNode, const char* searchWord){
if (strcmp(startNode->Value(), searchWord) == 0){// base case
return startNode;
}
else
{
for (TiXmlNode* node = startNode->FirstChild(); node; node = node->NextSibling())
{
findNode(node, searchWord);
}
}
}
答案 0 :(得分:0)
考虑最深findNode
次调用何时返回startNode
。它去哪儿了?好吧,它是从这里打来的:
findNode(node, searchWord);
你对这个结果做了什么?没有!你忽略了它。你需要return
一直向下堆叠。
或者从另一方面考虑它。第一次调用findNode
,如果它没有进入第一个if
块,将永远不会达到return
语句。它永远不会有return
你想要的机会。
以下是我的写作方式:
TiXmlNode* findNode(TiXmlNode* startNode, const char* searchWord){
if (strcmp(startNode->Value(), searchWord) == 0){// base case
return startNode;
}
for (TiXmlNode* node = startNode->FirstChild(); node; node = node->NextSibling())
{
TiXmlNode* foundNode = findNode(node, searchWord);
if (foundNode != NULL) {
return foundNode;
}
}
return nullptr;
}