2010-10-22 96 views
0

我有算法void leveltraversal(ostream& out); 但我不知道如何在main()中調用它。在我的作業中,我們不允許更改頭文件。有沒有方法可以調用它而不會超載?二叉搜索樹 - breadthFirst函數調用

更新:

void BST::levelTraversal(ostream& out){ 
queue<BST::BinNode*> q; 
BinNode* cur = myRoot; 
BinNode* top = NULL; 
q.push(cur); 
while(q.empty() != false){ 
    top = q.front(); 
    if(top->left != NULL){ 
    q.push(top->left); 
    } 
    if(top->right !=NULL){ 
    q.push(top->right); 
    } 
    out<<top->data; 
    q.pop(); 
} 
} 
+0

它是一個免費的功能,或者某些類的成員函數? (但我期望後者。) – Arun 2010-10-22 05:03:30

+0

它是BST類的成員 – Steven 2010-10-22 05:03:54

+0

讓我試試這個,然後生病回到你身邊。 – Steven 2010-10-22 05:06:45

回答

1

參數,ostream&,採取任何output stream,例如輸出文件。下面的示例使用標準輸出作爲ostream

BST myBst; 
// insert elements into myBst 
myBst.leveltraversal(std::cout); 
+0

@Steven:我更新了答案並提供了'ostream'的鏈接。 – Arun 2010-10-22 05:15:07

0

如果不能改變函數標題,可以定義全局變量和在這兩種功能(mainleveltraversal)引用它們。

+0

我不明白如何打印出來, – Steven 2010-10-22 05:11:53

+0

-1,因爲你不應該使用任何形式的全局狀態作爲隱藏函數輸入參數。這種參數*很可能會在將來的代碼更改中造成痛苦。 – Rudi 2010-10-22 06:33:50

0

這是我

void BST::levelTraversal(ostream& out){ 
queue<BST::BinNode*> q; 
BinNode* cur = myRoot; 
BinNode* top = NULL; 
q.push(cur); 
while(q.empty() != false){ 
    top = q.front(); 
    if(top->left != NULL){ 
    q.push(top->left); 
    } 
    if(top->right !=NULL){ 
    q.push(top->right); 
    } 
    out<<top->data; 
    q.pop(); 
} 
} 
+0

這不是一個答案 - 它可能更適合於「編輯」你的問題,並在那裏添加這些東西。然後,你可以刪除這個答案,包括這個評論。 – Arun 2010-10-22 05:16:57

+0

如何在評論中正確地格式化代碼? – Steven 2010-10-22 05:17:41

+0

好的 - 我爲你編輯了問題並添加了方法定義。你現在可以刪除這個答案。 – Arun 2010-10-22 05:24:20