另一個遞歸問題,對不起,只是無法讓我的頭轉過來。我試圖返回一個節點指針,其id與提供的id相匹配。我想我正確地遍歷樹。任何想法,我在這裏錯了嗎?從遞歸函數中返回一個值
//h
Node* findNode(const QString &id, Node *node=NULL)
//cpp
Node* Tree::findNode(const QString &id, Node *node)
{
if (node == NULL)
node = root;
for(int i = 0, end = node ? node->childCount() : -1; i < end ; i++)
{
QString nodeId = node->child(i)->id();
if (nodeId == id)
{
return node;
}
else
{
return findNode(id, node->child(i));
}
}
}
感謝您尋找
謝謝大家。 Mats,在else子句中,節點ID與所需的ID不匹配,爲什麼我需要返回節點? – dogsbollocks
'return temp;'是要替換'return findNode(...)' - 這意味着你找到了你正在尋找的子節點。顯然,如果'temp'是NULL,你需要繼續尋找。在你的原始代碼中,你總是在這個時候返回,所以你從來沒有把所有的節點看成一個特定的級別 - 這顯然是錯誤的。但是如果你發現了某些東西,你就不想繼續尋找,所以如果你有的話就回來。 –