二叉堆第一个非叶子结点的索引

在堆排序中,需要确定二叉堆第一个非叶子结点的索引。将大小为 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]。

posted @ 2022-03-29 12:16  Higurashi-kagome  阅读(201)  评论(0编辑  收藏  举报