从未排序数组构建最大堆是否会遵循二叉树属性?

时间:2015-06-14 05:22:03

标签: java c arrays algorithm heap

给出一个大小为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,我会继续将元素插入堆中吗? (有更好的解决方案吗?)

1 个答案:

答案 0 :(得分:0)

不,您对数据结构感到困惑。

堆不保证BST(二叉搜索树)的排序方式。堆只保证给定节点的子节点满足堆属性(即,它们都小于最大堆的给定子树根,或者对于最小堆来说更大)。

另一方面,BST保证给定子树的根目录中的所有键都小于左子树上的根键,并且所有键都大于右侧子树。

编辑 :您可以在堆上运行heapsort以在nlogn时间内生成排序数组,从中可以在线性时间内构建平衡BST