我有一个二叉树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);
}
我有两个问题:
答案 0 :(得分:1)
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);
}
答案 1 :(得分:0)
访客是一种技巧。看起来您已经将该技术与特定解决方案混淆了。使用访问者意味着某些导航服务由数据结构提供,该数据结构将通过回调与外部对象(访问者)通信。