我正在嘗試使用鍵值對遍歷模板化 AVLtree 并回傳所有值的向量。
使用 cout 陳述句時,我可以判斷該函式正確地遍歷了樹,并且它將回傳樹中的所有值。但是,當我嘗試將其添加到向量中并在程式的另一部分中使用它時,只存盤了根節點。
vector<s> treeTraversal(){
return treeTraversal(root);
}
vector<s> treeTraversal(AVLNode<t, s> *node ){
vector<s> temp;
if(node != nullptr){
treeTraversal(node -> left);
treeTraversal(node -> right);
temp.push_back(node -> vectorToBe);
}
return temp;
}
我打算將所有回傳的值存盤在一個向量中,以便我可以在程式的后面部分訪問它們
uj5u.com熱心網友回復:
treeTraversal(node -> left);
這遞回呼叫函式,這是兩個遞回呼叫之一。您的treeTraversal()函式回傳一個向量。然而,在這里,它的回傳值被丟棄而不是存盤在任何地方。
return temp;
這是您的函式returns的向量。然而,正如我們所見,它不包括任何遞回呼叫回傳的任何內容,因為這些回傳值被丟棄并被忽略。
有兩種常用方法可以解決此問題:
不要忽略兩個遞回呼叫回傳的向量。存盤它們,然后將它們的內容附加到
temp.而不是回傳
std::vector使其成為遞回呼叫的附加引數。每個遞回呼叫只是將其值附加到傳入的向量(并將其轉發到任何后續的遞回呼叫)。遞回函式的呼叫者將負責實體化一個初始為空的向量,并將其傳入。
uj5u.com熱心網友回復:
我會嘗試這樣的事情。您將避免vector<s>在堆疊中創建大量s。
vector<s> treeTraversal(){
vector<s> result;
treeTraversal(root, result);
return result;
}
void treeTraversal(AVLNode<t, s> *node, vector<s>& visited ){
if(node != nullptr){
treeTraversal(node -> left, visited);
treeTraversal(node -> right, visited);
visited.push_back(node->vectorToBe);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/373615.html
上一篇:在運行時選擇C 模板
