我给出了有序遍历并需要找到二叉树。我提到了我的网站,大多数人说这是不可能的。但是,我认为一个非唯一的二叉树是可能的。我可以使用给定的有序遍历找到二叉树吗?如果没有,我可以从给定的有序遍历找到相应的预订遍历吗?
我尝试通过选择有序的中心节点作为根来将顺序转换为预订,但我不确定它是否正确。请指导我。
谢谢。
答案 0 :(得分:2)
鉴于节点的有序遍历,以及问题中没有更多信息,您可以找到 a 二叉树,但正如您所说,它不会是唯一的解决方案(特别是如果树不必平衡)。因此,您可以再次找到 a 预订定遍历。
例如,如果您的有序遍历为[1,2,3,4,5,6,7,8]
,那么即使树是平衡的,根节点也有多种可能性(即4或5)。如果树不必须平衡,您可以选择其中任何一个作为根节点。
以下是在任意选择4作为根节点后可以构建的非平衡树的示例:
4
/ \
3 6
/ / \
2 5 7
/ \
1 8
此树的预订遍历将产生4,3,2,1,6,5,7,8
。同样,如果您只需要找到 a 二叉树,那么这与设置1作为根节点并使其他所有内容成为正确的节点一样有效:
1
\
2
\
3
\
4
\
5
\
6
\
7
\
8
此树的预订遍历为1,2,3,4,5,6,7,8
。由于这些树都生成相同的有序遍历,但是不同的预先遍序遍历,因此对于给定的有序遍历,不能保证是单个唯一树或甚至是单个唯一的预先遍历遍历。
答案 1 :(得分:0)
对于一个节点的更多节点,没有包含inorder遍历的唯一二叉搜索树。
但是如果你想要一棵树,那么只需执行随机序列的随机混乱,然后将得到的随机序列插入二叉搜索树