二叉堆第一个非叶子结点的索引
在堆排序中,需要确定二叉堆第一个非叶子结点的索引。将大小为 N 的二叉堆保存于数组 a[0..N-1],其第一个非叶子结点的索引为 [N/2]-1。
- 由知对于大小为 N 的完全二叉树(二叉堆是特殊的完全二叉树),其叶子结点总数为 [(N+1)/2];
- 设所求索引为 x,则 N-1-x = [(N+1)/2],x = N-1-[(N+1)/2];
- 当 N 为奇数时,x = N-1-(N+1)/2 = (N-3)/2 = [N/2]-1;
- 当 N 为偶数时,x = N-1-N/2 = [N/2]-1。
- 所以 x=[N/2]-1。
类似可得到,将大小为 N 的二叉堆保存于数组 a[1..N],其第一个非叶子结点的索引为 [N/2]。