给出一个大小为10的未排序数组
int[] arr={∞,1,2,3,4,5,6,7,8,9,10};
如果我执行代码
public void build_heap(){
for(int i=size/2;i>=1;i--)
max_heapify(i);
}
例如中的结果数组遵循二叉树属性
(即左子树< root& root< right subtree)
? 如何生成这样的数组?
这是正确的方法:
而不是使用build_heap
,我会继续将元素插入堆中吗? (有更好的解决方案吗?)
答案 0 :(得分:0)
不,您对数据结构感到困惑。
堆不保证BST(二叉搜索树)的排序方式。堆只保证给定节点的子节点满足堆属性(即,它们都小于最大堆的给定子树根,或者对于最小堆来说更大)。
另一方面,BST保证给定子树的根目录中的所有键都小于左子树上的根键,并且所有键都大于右侧子树。编辑 :您可以在堆上运行heapsort以在nlogn时间内生成排序数组,从中可以在线性时间内构建平衡BST