【发布时间】:2016-07-11 18:13:45
【问题描述】:
我们可以使用say pre order traversal output来构造唯一的二叉搜索树,如下所示:
- 第一个元素将是根。
- 左子元素 = 小于根的最近元素。
- 右子元素 = 比根大的最近元素。
这些事实很容易转换为代码。但是,我正在努力获得如此严格的事实/步骤来将级别顺序遍历输出转换为唯一的二叉搜索树。
例如,如果我有以下级别顺序遍历输出[5,4,8,1,7,2,6,3],我可以形成如下BST:
5
/ \
4 8
/ /
1 7
\ /
2 6
\
3
级别顺序遍历中的第一个元素始终是根(级别 0)。然后是第 1 层的元素。4 小于 5,所以我将其作为左孩子 pf 5。8 大于 5,所以我将其作为 5 的右孩子。(它不能是 4 的孩子,因为在那种情况下它应该小于 5。因此它不能出现在第 2 级)。然后是 1 和 7。1 应该是 4 的左孩子,因为它小于 4。7 不能是 4 的右孩子,因为它也大于 5。所以它应该在 5 的右子树上。因此它必须是 8 的左子树,如 7
我的感觉是,这被证明是正常的 BST 创作。也就是说,它是通过在级别顺序输出序列中的空 BST 中插入节点来创建 BST。是吗?我的意思是在从前序遍历输出构造唯一 BST 的情况下,是否有与上述步骤等效的步骤。或者我们只需要遵循 BST 创建算法,在空的 BST 中按照层序遍历输出的顺序插入节点?
【问题讨论】:
标签: algorithm data-structures tree binary-tree binary-search-tree