gpt4 book ai didi

关于遍历二叉树的C++设计题

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:34:59 25 4
gpt4 key购买 nike

我有一个二叉树 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);

}

我有两个问题:

  1. 我决定使用基于仿函数的方法,因为我看到增强图可以做到这一点(顶点访问者)。我也倾向于重复相同的代码来遍历树并做不同的事情在每个节点。这是摆脱重复代码的好设计吗?还有哪些其他替代设计?
  2. 如何使用它从现有的二叉树创建新的二叉树?我可以在上面放一堆如果我愿意,可以访问仿函数,但它与访问者中的算法相关联。
  3. 我如何在此处合并后序遍历?另一个仿函数类?

最佳答案

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++设计题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2579172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com