【问题标题】:How do i convert the tree's nodes to nodes of the queue?如何将树的节点转换为队列的节点?
【发布时间】:2012-08-24 12:04:01
【问题描述】:

我正在使用队列来实现广度优先搜索。树的节点是 state 类型的,而队列中的节点是 node 类型的。

    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);

要将树的节点(状态类型)传递给它,我必须通过复制构造函数或重载赋值运算符转换它们,或者 - 我可以使 Queue 成为 Queue 的基类strong>state 以便通过多态在队列中接受状态对象。 现在有什么好的方法呢?

【问题讨论】:

  • Err,你不需要保留state *s 的队列才能让它工作吗?
  • @veredesmarald 但state 在队列中没有必要的状态 *link 成员
  • 如果您打算将此队列用于 BFS,您需要能够找到您出列的每个节点的邻居(在原始树中)并将它们添加到队列的末尾。如果您的队列只是存储来自树节点 (b1 ... b4) 的数据,而不是指向实际树节点的指针,您将如何完成此操作?
  • @veredesmarald 这发生在我身上——所以实现它的一种方法是让 state 成为队列的基类,不是吗?但是我怎么能将state 节点传递给队列(因为多态性相反)?
  • 你在写 C++ 吗?如果是这样,通常的容器(如队列)方法是使用模板,因此队列节点可以存储您想要的任何内容。

标签: algorithm queue copy-constructor breadth-first-search


【解决方案1】:

如何使用

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    相关资源
    最近更新 更多