【问题标题】:Constructing Binary Tree given Post order给定发布顺序构建二叉树
【发布时间】:2017-06-17 17:51:33
【问题描述】:

如果只给出后序遍历的信息,如何构造二叉树。在搜索了主题之后,我明白在这种情况下不可能有唯一构造的二叉树。但是,如果给定 Integers ,则基于小于或大于属性创建 BT 变得容易。但是如果我们有字母表,那么我无法弄清楚我们在什么基础上制作父节点的左节点或右节点。这是我要解决的问题。

Q) 二叉树的后序遍历是DEBFCA。找出前序遍历?

选项:
(A) ABFCDE
(B) ADBFEC
(C) ABDECF
(0) ABDCEF

正确答案是:C

谁能解释一下我们如何回答。

我发现这个答案https://www.quora.com/If-the-post-order-traversal-of-a-binary-tree-is-DEBFCA-how-can-I-find-out-the-pre-order-traversal/answer/Eugene-Yarovoi?srid=zy7j 非常有帮助,但是从第三步开始,我不明白事情是如何发生的。 感谢您的宝贵时间

【问题讨论】:

  • @daniel-fischer 你能帮我解决这个问题吗
  • 这不是你通知某人的方式。你可以@他们的用户名
  • 我认为您发布的字符串不正确。问题字符串中没有字母O,所以C不正确。
  • @4castle 可能是键盘问题。我认为 0 和 O 应该是 D
  • Quora 中给出了相同的问题答案。 quora.com/…

标签: java algorithm data-structures binary-tree


【解决方案1】:

如果给定整数,则基于小于或大于属性创建 BT 变得容易。但是如果我们有字母表,那么我无法弄清楚我们在什么基础上制作左节点或右节点

嗯,在 Java 中 ("B" > "A") == true 因为字符串是按字典顺序比较的...

二叉树的后序遍历是DEBFCA

根据后序的定义,你知道 A 是根,所以问题是 B 或 D 是在 A 的左边还是右边。(如果你考虑给你的选择)

同样从后序中,你知道 D 必须是最左边的元素,因为它位于后序字符串的开头。现在您可以排除选项 A(D 不是 C 的子项)和选项 B(D 不是紧接在 A 的左侧)。

此时,您可以确定您的树看起来像这样,因为帖子排序以CA 结尾并以D 开头

    A 
  B    C
 ...   ...
D     ......

在后序中,您有FCA,因此 F 将是 C 的子代,而 C 是 A 的子代,以便按该顺序发生。

    A 
  B    C
 ...   ...
D     ...  F

我们已经完成了除了 E 之外的所有任务。从后订单中,您有 DE,我们有 D 作为最左边的叶子,所以 E 必须是它的兄弟。

这是完整的树(我认为F的位置可以互换)

     A 
  B    C
D  E     F

通过排除,选项 C 仍然存在。

【讨论】:

  • "你知道 A 是根,所以问题是 B 或 D 是在 A 的左边还是右边。"你为什么只考虑 B 或 D 。为什么不选择 BF 或 DE(假设您正在比较给定的预购选项)
  • "如果这是一个真正有序的二叉树,则 B 在左侧。这排除了选项 B。" - 我不确定他们是否在谈论真正有序的二叉树。如果他们不谈论真正有序的二叉树怎么办。我知道他们有很多可能性,但我们需要查看预购和后购并找出哪个预购与后购一致
  • 解决第一条评论。当然,您将 A 作为根。我想我们同意。我只考虑 B 和 D,因为这些是您在问题中的唯一选择。您可以选择 AB 或 AD。
  • 我进行了编辑以阐明为什么在不应用自上而下排序的情况下排除选项 B。
【解决方案2】:

前序遍历的一般算法如下,

public void preorder(Node n) {
    if(n == null) {
        return;
    }
    System.out.println(n.data);
    preorder(n.left);
    preorder(n.right);
}

因此,在进行前序遍历时,它在验证节点不为空后所做的第一件事就是打印出节点的值。然后它继续递归地首先调用节点的左孩子上的方法,然后是右孩子。因此,应该很容易看出前三个字母是 ABD,因为 preorder 方法将在树的最左侧递归调用。 D 没有孩子,所以前序遍历返回到它对 B 的方法调用。现在 B 的右孩子被访问,因此顺序现在是 ABDE。 E没有孩子,所以先序遍历回到B。但是B的所有孩子都检查过了,所以现在回到A。现在在A的右孩子上调用preorder方法。现在的订单是 ABDEC。 C只有一个左孩子,所以访问F后完成了前序遍历,最终序为ABDECF。

【讨论】:

    【解决方案3】:

    多项选择题中很多时候有错别字。这里也一样,没有O。 唯一的树不能仅仅通过后序来绘制来回答我们必须搜索一个可能的预序,它可以如下(ABDECF)所以ans是C(假设选项中的错字)因为A最后是后序所以它必须是根,所以一棵可能的树是

    在您知道 A 是根之后,我们只剩下 DEBFC。这里一些节点属于二叉树的左侧,一些属于右侧。有多少节点属于左边,多少节点属于右边。由于首先考虑二叉树的左侧,并且由于每个节点最多有两个孩子,因此 DEB 将是二叉树的左侧,FC 将是右侧。现在,我们知道 FC 在二叉树的右边。最后一个节点将是子树的根,F 是它的左侧。接下来我们来到二叉树的左侧,它是 DEB。同样,B 将是子树的根。 D 和 E 分别是它的左侧和右侧。这样树就创建好了!!

    【讨论】:

    • 很明显,A 将是根。根据你在左右孩子中放入 B、C 的依据,可以有其他方法,其他 DEBFC 也是如此
    • 知道 A 是根之后,请查看编辑以获取解释。干杯
    • 基于什么你声称“DEB 将是二叉树和 FC 的左侧”,因为所有 DEBFC 都可以是左子树或右子树。说每个节点最多可以有 2 个子节点并不能完全阻止“DEBFC”成为左子树或右子树的一部分。请参考ugcnetsolved-computerscience.blogspot.in/2012/09/… 并去评论部分。谢谢
    • 好吧。为了让它更简单,从这个问题的角度来看,你不能为选项 A B 和 D 生成树。尝试它会更容易。
    • 回答您的问题,即“DEB”是什么基础而“FC”是正确的......根是A。然后它从左到右,所以DEB和FC因为DEB是最左边的参与后订单。但在 MCQ 中,我建议您从选项中移除并尝试消除其他选项。如果您有更多疑问,请联系。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多