尽可能高效地将最小堆转换为二进制搜索树,而不使用额外的空间。 (允许递归)。
这个问题一直让我发疯。 必须是一种使用min-heap属性比暴力更有效地执行此操作的方法。例如,给定这个min-heap:
[1, 7, 6, 9, 8, 21, 15] =
1
/ \
7 6
/ \ / \
9 8 21 15
我们立即知道,根据定义,根将成为我们的二叉搜索树中最左边的节点。我们也知道min-heap中任何节点的正确子节点都不违反BST属性(parent.right> parent)。
我们如何利用这些事实有效地创建就地BST?