2012-08-24 62 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; 
}; 

您的队列现在可以简单地存储节点*指针