Java 从未排序的数组构建最大堆会遵循二叉树属性吗?
给定一个大小为10的未排序数组Java 从未排序的数组构建最大堆会遵循二叉树属性吗?,java,c,arrays,algorithm,heap,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); } 什么情况下的结果数组遵循二叉树属性 (即左子树
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);
}
什么情况下的结果数组遵循二叉树属性
(即左子树<根&根<右子树)
??
如何生成这样的数组
这是正确的方法吗:
不是使用
build\u heap
,而是继续将元素插入堆中?(有更好的解决方案吗?没有,您对数据结构感到困惑
堆不能像BST(二进制搜索树)那样保证排序。堆只保证给定节点的子节点满足heap属性(即,对于max堆,它们都小于给定的子树根,对于min堆,它们都大于给定的子树根)
另一方面,BST保证给定子树的根在左子树上的所有键都小于根的键,在右子树上的所有键都大于根的键
编辑:您可以在堆上运行以在nlogn时间内生成一个排序数组,从中可以在线性时间内构造一个平衡的BST。这是一个
二进制搜索树
属性。不仅仅是一个二叉树
属性。为什么要使用C标记?二叉树具有不同的堆特性