在给定的Inorder / Preorder / Postorder遍历中,不能构造树木

时间:2014-01-24 11:19:53

标签: algorithm data-structures tree

我知道如果没有Inorder和Preorder / postorder遍历,就无法构建树。因为对于给定的(仅有内订/预订/后序),可能会产生更多数量的树。是否有任何算法或机制可以计算给定的唯一树的数量(只有Inorder / Preorder / postorder遍历)。

Eg : a b c d e f g this is my Inorder traversal. 

使用给定的Inorder遍历可以构造多少个唯一树。

我试过它们是Google,但没有一个解释清楚

任何帮助将不胜感激......

3 个答案:

答案 0 :(得分:5)

算法如下:

设,P(N)表示N个节点可能的树数。让节点的索引为1,2,3,...

现在,让我们选择树的根。任何给定的N节点都可以是根节点。假设节点i已被选为root。然后,顺序序列中i左侧的所有元素必须位于left sub-tree中。同样,在右边。

所以,总的可能性是:P(i-1)*P(N-i)

在上面的表达式i1 to N不等。

因此我们有,

P(N) = P(0)*P(N-1) + P(1)*P(N-2) + P(2)*P(N-3)....

基本案例将是:

P(0) = 1 
P(1) = 1

因此,可以使用Dynamic Programming来解决这个问题。

答案 1 :(得分:2)

请注意,特定遍历只是标记树中节点的一种方式,因此对于任何两个相同长度的遍历,可能的二叉树的数量是相同的。 n st Catalan number给出了n-1个节点的二叉树数量。

答案 2 :(得分:0)

公式

(2n)!/(n)!(n + 1)!

OR

2n * C(n)/(n + 1)

为任何给定的INORDER / PREORDER / POSTORDER遍历提供可能的二叉树数量。