2013-08-03 212 views
4

我試圖在C++中實現一個BST。這是一個特定的成員函數,用於執行遍歷並返回帶有樹的元素的向量。 現在問題出現在我設置爲當前節點的堆棧pop()函數中。
void value not ignored as it ought to beBST:void值不會被忽略,因爲它應該是

據我所知,空棧將前面的pop()方法call.But那麼什麼是解決這個,因爲它是需要在這個traversal algorithm檢索從堆棧中的最後一個節點後,返回一個空值。

vector <int> BSTree::in_order_traversal() 
{ 

vector <int> list; 
stack <Node *> depthStack; 
Node * cur = root; 

while (!depthStack.empty() || cur != NULL) { 
       if (cur != NULL) { 
         depthStack.push(cur); 
         cur = cur->left; 
                } 
       else        { 
         cur = depthStack.pop(); // Heres the line 
         list.push_back(cur->key); 
         cur = cur->right; 
                 } 

                                      } 
return list; 

} 
+0

你做你的代碼有空隙返回函數的「返回值」的東西。停止這樣做是沒有意義的。 – Mat

回答

7

在C++函數

std::stack::pop() 

不返回從堆棧中移除的值。原因在於,從異常安全的角度來看,通常沒有辦法正確編寫這樣的函數。

您需要先存儲該值,然後使用pop ...例如將其刪除。

Node *x = depthStack.top(); 
depthStack.pop(); 
相關問題