我知道如果没有Inorder和Preorder / postorder遍历,就无法构建树。因为对于给定的(仅有内订/预订/后序),可能会产生更多数量的树。是否有任何算法或机制可以计算给定的唯一树的数量(只有Inorder / Preorder / postorder遍历)。
Eg : a b c d e f g this is my Inorder traversal.
使用给定的Inorder遍历可以构造多少个唯一树。
我试过它们是Google,但没有一个解释清楚
任何帮助将不胜感激......
答案 0 :(得分:5)
算法如下:
设,P(N)
表示N
个节点可能的树数。让节点的索引为1,2,3,...
现在,让我们选择树的根。任何给定的N
节点都可以是根节点。假设节点i
已被选为root。然后,顺序序列中i
左侧的所有元素必须位于left sub-tree
中。同样,在右边。
所以,总的可能性是:P(i-1)*P(N-i)
在上面的表达式i
与1 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遍历提供可能的二叉树数量。