2012-08-24 52 views
0

我正在使用隊列來實現廣度優先搜索。樹的節點類型爲狀態,而隊列中的節點類型爲節點如何將樹的節點轉換爲隊列的節點?

struct node 
{ 
int b1,b2,b3,b4; 
node* link; 
} 

struct state 
{ 
int b1,b2,b3,b4; 
state* rightChild; 
state* leftChild; 
}; 

的Queue.enqueue()函數的原型爲:

 bool enqueue(node n); 

傳遞給它的樹的節點(類型的國家),我必須要麼將它們轉換複製構造函數或重載賦值運算符,或者 - 我可以使隊列的基類狀態,以便接受狀態對象由多態性排隊。 現在做這件事的好方法是什麼?

+0

犯錯,難道你必須保持的狀態''個隊列這可能工作呢? – verdesmarald

+0

@ veredesmarald,但'state'在隊列中沒有必要的狀態*鏈接成員 – Ghost

+0

如果您打算將此隊列用於BFS,您需要能夠找到每個節點的鄰居(在原始樹中)出隊並將它們添加到隊列的末尾。如果你的隊列只是存儲來自樹節點('b1 ... b4')的數據而不是一個指向實際樹節點的指針,你將如何實現這一點? – verdesmarald

回答

0

如何使用

struct node 
{ 
    struct state* treeNode; 
    struct node* link; 
}; 

您的隊列現在可以簡單地存儲節點*指針