从未排序数组构建最大堆是否会遵循二叉树属性?
Would building a max heap from an Unsorted array would follow Binary Tree properties?
给定一个大小为 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);
}
什么情况中的结果数组遵循二叉树属性
( ie left subtree < root & root < right subtree )
?
如何生成这样的数组?
这是正确的方法吗:
而不是使用 build_heap
, keep 我将继续将元素插入堆中? (有更好的解决方案吗?)
不,你对你的数据结构感到困惑。
堆不能像 BST(二叉搜索树)那样保证顺序。堆仅保证给定节点的子节点满足堆 属性(即,对于最大堆,它们都小于给定的子树根,对于最小堆,它们都小于给定的子树根)。
另一方面,BST 保证给定子树的根在左子树上具有小于根键的所有键,在右子树上具有大于根键的所有键。
编辑:你可以在堆上运行 heapsort在nlogn时间内生成排序数组, 从中你可以在线性时间内构建一个平衡的 BST。
给定一个大小为 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);
}
什么情况中的结果数组遵循二叉树属性
( ie left subtree < root & root < right subtree )
? 如何生成这样的数组?
这是正确的方法吗:
而不是使用 build_heap
, keep 我将继续将元素插入堆中? (有更好的解决方案吗?)
不,你对你的数据结构感到困惑。
堆不能像 BST(二叉搜索树)那样保证顺序。堆仅保证给定节点的子节点满足堆 属性(即,对于最大堆,它们都小于给定的子树根,对于最小堆,它们都小于给定的子树根)。
另一方面,BST 保证给定子树的根在左子树上具有小于根键的所有键,在右子树上具有大于根键的所有键。
编辑:你可以在堆上运行 heapsort在nlogn时间内生成排序数组, 从中你可以在线性时间内构建一个平衡的 BST。