我们有一个包含 2m - 1 个不同可比较的元素的数组,索引从 1 开始。
我们可以将这个数组看作一棵完全二叉树:
Node is placed at index i.
Left child is placed at 2i.
Right child is placed at 2i+1.
例如,数组
[7 6 4 5 2 3 1]
表示树。 7
/ \
6 4
/ \ / \
5 2 3 1
现在,将这些元素视为二叉树时,它们满足堆属性,即一个节点大于其两个子节点:
A[i] > A[2i] and A[i] > A[2i+1]
是否有一种合理快速、原地算法来重新排列数组的元素,使得所得到的二叉树(如上所述)成为二叉搜索树?请记住,在二叉搜索树中,一个节点大于其左侧所有后代,小于其右侧所有后代。
例如,上述数组的重排结果是
[4 2 6 1 3 5 7]
对应于二叉搜索树。 4
/ \
2 6
/ \ / \
1 3 5 7
O(1)
,还是实际定义的O(log n)
? - ltjax