我有一个二叉树T,我想把它复制到另一棵树上。
假设我有一个访问方法,它在每个节点上都得到评估:

struct visit
{
 virtual void operator() (node* n)=0;

};

我有一个访客算法
void visitor(node* t, visit& v)
{
//do a preorder traversal using stack or recursion
 if (!t) return;
 v(t);
 visitor(t->left, v);
 visitor(t->right, v);

}

我有两个问题:
我决定使用基于函子的方法,因为我看到boost图做到了这一点(顶点访问者)。另外,我倾向于重复相同的代码来遍历树并执行不同的操作
在每个节点。这是一个去除重复代码的好设计吗还有其他的替代设计吗?
我如何使用它来创建一个新的二叉树?我可以在
如果我想的话,可以访问函子,但它与visitor中的算法有关。
我如何在这里合并后序遍历另一个函子类?

最佳答案

3:为要执行的每种遍历类型创建一个附加方法,并重新排列访问者调用:

void preorder_visitor(node* t, visit& v)
{
 if (!t) return;
 v(t);
 visitor(t->left, v);
 visitor(t->right, v);
}

void postorder_visitor(node* t, visit& v)
{
 if (!t) return;
 visitor(t->left, v);
 visitor(t->right, v);
 v(t);
}

关于c++ - 遍历二叉树的C++设计问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2579172/

10-11 06:08