Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 树上的采访主题_Algorithm_Recursion_Tree_Binary Tree - Fatal编程技术网

Algorithm 树上的采访主题

Algorithm 树上的采访主题,algorithm,recursion,tree,binary-tree,Algorithm,Recursion,Tree,Binary Tree,所以我在准备面试时遇到了一个关于镜像二叉树的问题,即通过修改现有的右子树将右子树镜像到左子树 对于给定的树,如下所示 5 5 / \ mirror to / \ 7 8 -----------> 7 7 / \

所以我在准备面试时遇到了一个关于镜像二叉树的问题,即通过修改现有的右子树将右子树镜像到左子树

对于给定的树,如下所示

                 5                              5
                / \         mirror to        /    \
               7   8      ----------->      7      7
              / \                          / \    / \ 
             3   6                        3   6  6   3
这是我的想法,但我不确定。如果我错了,请纠正我

  • 关键是遍历的类型
  • 我想先遍历左子树,获取它的所有数据
  • 按顺序遍历会得到3,7,6,5,8
  • 现在,我想向右子树添加新节点,镜像根5(即3、7和6)之前的数据,并将它们复制到右子树。我们如何才能做到这一点

这里有关于伪代码的帮助吗?谢谢

考虑如何水平翻转二叉树可能更容易。一旦你能做到这一点,你只需要删除从根的右子树开始的子树,并将其替换为从根的左子树开始的子树的水平翻转副本。想一想如何水平翻转树:显然,你需要交换它的左子树和右子树。您需要对这些子树做进一步的操作吗?不,我只想修改右子树并将其镜像到左子树。嗯,让我想想你的建议。我不确定你建议的解决方案是否有效。如果如你所说,我翻转树,那么在我上面的示例中,起始节点为8的子树将向左移动,起始节点为7的子树将向右移动。现在,如果我删除根,它将删除从7开始的子树,这是我想要镜像而不是删除的。我是不是错过了什么?请你澄清一下好吗?感谢我的第一条评论是建议通过将任务分解成(稍微)简单的子问题来实现你想要的。我的第二条评论是描述(部分)如何实现我在第一条评论中提到的翻转,而不是整个目标。