Algorithm 不能从给定的按序/前序/后序遍历构造任何树
我知道,如果没有顺序和前序/后序遍历,就无法构造树。因为对于给定的树(仅按顺序/前顺序/后顺序),可能会生成更多的树。是否有任何算法或机制可以从给定的(仅按序/前序/后序遍历)计算唯一树的数量 使用给定的顺序遍历可以构造多少唯一树Algorithm 不能从给定的按序/前序/后序遍历构造任何树,algorithm,data-structures,tree,Algorithm,Data Structures,Tree,我知道,如果没有顺序和前序/后序遍历,就无法构造树。因为对于给定的树(仅按顺序/前顺序/后顺序),可能会生成更多的树。是否有任何算法或机制可以从给定的(仅按序/前序/后序遍历)计算唯一树的数量 使用给定的顺序遍历可以构造多少唯一树 Eg : a b c d e f g this is my Inorder traversal. 我试过他们是谷歌,但没有一个解释是清楚的 非常感谢您的帮助……算法如下: 设,p(N)表示具有N节点的树的数量。让节点的索引为1,2,3,… 现在,让我们选择树根。任
Eg : a b c d e f g this is my Inorder traversal.
我试过他们是谷歌,但没有一个解释是清楚的
非常感谢您的帮助……算法如下: 设,
p(N)
表示具有N
节点的树的数量。让节点的索引为1,2,3,…
现在,让我们选择树根。任何给定的N
节点都可以是根节点。假设节点i
已被选为根。然后,顺序序列中i
左侧的所有元素必须位于左子树中。同样,右翼
因此,总的可能性是:p(i-1)*p(N-i)
在上述表达式中,i
的变化范围为1到N
因此,
P(N) = P(0)*P(N-1) + P(1)*P(N-2) + P(2)*P(N-3)....
基本情况将是:
P(0) = 1
P(1) = 1
因此,这可以通过使用动态规划来解决。算法如下:
设,p(N)
表示具有N
节点的树的数量。让节点的索引为1,2,3,…
现在,让我们选择树根。任何给定的N
节点都可以是根节点。假设节点i
已被选为根。然后,顺序序列中i
左侧的所有元素必须位于左子树中。同样,右翼
因此,总的可能性是:p(i-1)*p(N-i)
在上述表达式中,i
的变化范围为1到N
因此,
P(N) = P(0)*P(N-1) + P(1)*P(N-2) + P(2)*P(N-3)....
基本情况将是:
P(0) = 1
P(1) = 1
因此,这可以通过使用动态规划来解决。请注意,特定的遍历只是标记树中节点的一种方式,因此对于相同长度的任意两次遍历,可能的二叉树的数量是相同的。具有n
节点的二叉树的数量由n-1
st给出。注意,特定的遍历只是标记树中节点的一种方式,因此对于任何两个相同长度的遍历,可能的二叉树的数量都是相同的。具有n
节点的二叉树的数量由n-1
st.公式给出
(2n)!/(n) !!(n+1)
或
2n*C(n)/(n+1)
给出任意给定按序/前序/后序遍历的可能二叉树数。公式
Eg : a b c d e f g this is my Inorder traversal.
(2n)!/(n) !!(n+1)
或
2n*C(n)/(n+1)
为任何给定的按序/前序/后序遍历提供可能的二叉树数。如果没有按序和按序/后序遍历,就无法构造树。
这是一条粗体语句:给定的键在子树中是唯一的,它们以前序(等价的后序)为根以及从左到右(显式或按顺序(搜索树))的序列信息,可以毫不含糊地重建树。(仔细想想,这似乎需要对二叉树进行限制(用inoorder表示)。(我认为没有两个相等的键父键和子键就足够了,找到一个线性结构看起来是一个挑战。)如果没有索引遍历和前序/后序遍历,就无法构造树
这是一条粗体语句:给定子树中唯一的键,它们以前序(等价后序)为根,并从左到右(显式或按顺序(搜索树))提供有关其序列的信息,人们可以毫不含糊地重建一棵树。(仔细想想,这似乎需要对二叉树进行限制(用inoorder表示)。(我认为没有两个相等的键父键和子键就足够了,找到一个线性结构看起来是一个挑战。)
Eg : a b c d e f g this is my Inorder traversal.