我有一个二叉树 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);
}
我有两个问题:
- 我决定使用基于函子的方法,因为我看到提升图可以做到这一点(顶点访问者)。此外,我倾向于重复相同的代码来遍历树并在每个节点上做不同的事情。这是摆脱重复代码的好设计吗?还有哪些其他替代设计?
- 如何使用它从现有的二叉树创建新的二叉树?如果我愿意,我可以在访问函子上保留一个堆栈,但它与访问者中的算法相关联。
- 我将如何在这里合并后序遍历?另一个函子类?