【问题标题】:Why it is impossible to construct Binary Tree with Pre-Order, Post Order and Level Order traversals given?为什么不可能在给定的前序、后序和水平序遍历的情况下构造二叉树?
【发布时间】:2018-03-28 14:36:15
【问题描述】:

给定:

  1. 预购遍历。
  2. 后序遍历。
  3. 级别顺序遍历。

不能用 12 或 23 或 31 或即使给出 123 来构造二叉树!为什么是这样?以及为什么 InOrder Traversal 对于构造原始 Tree 非常重要?

【问题讨论】:

  • 因为有两种不同的树产生相同的前序、后序和水平序遍历。找到一个例子是一个很好的练习。

标签: algorithm tree


【解决方案1】:

如果没有中序遍历,我们就无法构建树。为什么?假设您只获得了前序遍历和后序遍历。一个简单的示例如下所示。
考虑两棵不同的树,

树 1:

root=a;  
root->left=b;  
root->left->right=c;  

树 2:

root=a;  
root->right=b;  
root->right->left=c;  

两棵树不同,但具有相同的前序和后序序列。

pre-order - a b c  
post-order - c b a  

这是因为我们不能单独使用前序或后序遍历来分离左子树和右子树。

预购,顾名思义,总是先访问根,再访问左右子树。也就是说,遍历一个预排序列表,我们命中的每个节点都是子树的一个“根”。

后序,顾名思义,总是先访问左右子树,再访问根。也就是说,向后遍历一个后序列表,我们命中的每个节点都是子树的一个“根”。

另一方面,按顺序总是先访问左子树,然后是根,然后是右子树,这意味着给定一个根(我们可以通过前序或后序遍历获得如上所述),中序遍历告诉我们给定根的左右子树的大小,因此我们可以构造原始树。(想想这个)

级别顺序遍历也是如此。因此,如果我们想要获得一棵唯一的树,我们需要一个中序遍历以及三个遍历中的任何其他遍历。
注意 - 当然,完整的二叉树除外,其中可以使用前序和后序遍历来构造树,因为树结构没有歧义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2021-09-03
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多