当前位置: 首页 > 知识库问答 >
问题:

为什么将遍历从顺序更改为前/后顺序会导致“练习:等效二叉树”中的答案错误?

卓新知
2023-03-14

在Golang之旅的并发部分有如下练习。问题语句想要验证两个输入树是否相同。

这里的问题是,当我们将遍历顺序从in顺序更改为前/后顺序时,它会失败。也就是说,波纹管代码工作正常

if t != nil {
    traverse(t.Left, ch)
    ch <- t.Value
    traverse(t.Right, ch)
}

但是,如果我们首先将值放入通道,然后转到节点的子节点,它的答案就错了(对输出不同的相同输入运行这个和这个)。

因为我们使用相同的代码遍历它,所以我们期望顺序不重要(即值以相同的顺序到达通道…)。

附言:你可以在这里找到这个练习的更多答案。

共有1个答案

楚意
2023-03-14

这个问题的答案与数据结构有关,而不是与Golang语法有关,并且与二进制搜索树属性有关。

正如文档中所述,树。Newfunc返回一个随机构造的键:

New返回一个新的随机二叉树,其中包含值k,2k。。。,10公里。

按序遍历promise要对输出进行排序,但对于前序和后序遍历则不是这样,因此这些遍历的输出将不相等。

考虑下面的树:

       4
      / \
     2   5
    / \
   1   3

顺序遍历:1,2,3,4,5

后序遍历: 1 3 2 5 4

有关详细信息:二叉树

 类似资料:
  • 我想对二叉树执行级别顺序遍历。因此,对于给定的树,说: 产出将是: 我知道我可以使用某种队列,但在C中递归地实现这一点的算法是什么?感谢您的帮助。

  • 我尝试按如下方式执行二叉树的垂直顺序遍历:1)找出每个节点与根节点之间的最小和最大水平距离2)创建一个hashmap,将水平距离映射到相应的节点(Map) 然而,我得到了不想要的输出,我认为在实现中有一些错误,因为算法对我来说似乎是正确的。 以下是完整的代码: 输出:{-1=[99999],0=[99999,12],-2=[99999],1=[99999],2=[99999]}那么我的apProc

  • 我正在研究爪哇的树木,在我正在研究的书中偶然发现了一些令人困惑的台词。给出的顺序遍历图如下: 遍历(递归)的代码是: 我感到困惑的是: 我已经突出了我所困住的部分。首先,我认为在第三步中,inOrder(C)[而不是inOrder(B)]返回inOrder(A)。第二,访问节点的顺序应该是B->A->C。 请帮帮我吧!

  • 这是在一次采访中问我的,但我搞砸了。我们给出了一个二叉树,但是,它被修改了,使得它的子节点永远不为空,如果一个非叶节点没有子节点,那么它的右/左子节点指向该节点本身。对于叶节点,它们指向下一个左节点和右节点。对于最左边和最右边的节点,它将指向自身和前一个/下一个元素。 示例: 这里4.左=4,4.右=5,5.左=4和5.右=6以此类推。 我们需要对这棵树进行顺序遍历。 请帮我弄一下。我无法为递归提

  • 这是一个相当简单的问题,我注意到当我表示一棵树时,无论我用哪种方式(后排序,按顺序,前排序)树叶总是以相同的顺序出现,从左到右。 我只是想知道为什么,这是有原因的吗? 我刚开始研究它们,就想到了这个。 编辑: 我有一棵这样的树: 叶节点为:D、E和F 预购顺序为:A、B、D、C、E、F 顺序是:D,B,A,E,C,F 后序是:D,B,E,F,C,A 叶子节点总是从左到右出现,不管我选择哪个顺序,问

  • 我正在尝试对二叉树进行级别顺序遍历。但诀窍是代替正常的级别顺序遍历,我想做另一种选择。对于例如。 普通等级顺序遍历 : 我要找的是我们打印根。现在,对于每一个偶数级,我都想逆时针旋转,对于每奇数级,都会顺时针旋转: 对于这种遍历,输出应该是: 这是我到目前为止尝试的,但这产生的输出与我试图实现的输出略有不同: 该程序产生以下输出: < code>1 3 2 5 4 7 6 10 11 9 8 我需