Algorithm 3: Complete binary tree

来源:互联网 发布:mysql 间隙锁 编辑:程序博客网 时间:2024/06/03 20:07

完全二叉树及其性质(可用于heapsort等)

如下图所示,是一棵近似的完全二叉树,以此举例说明。(b)是该树用 数组的存储的表示形式,其中数组中的连线部分,代表着后面被连线的元素是前一个元素的孩子节点。

下面描述,如何通过完全二叉树的相关性质 对于数组中位置下标为 idx 的元素,快速找到其孩子节点的元素在数组中的下表位置ci1,ci2

这里写图片描述

  1. 完全二叉树的 节点总数 为 2(n1)1 个。
    kk(0)nodek=2k

    n:NodesNum=k=0n2k

    NodesNum=k=0n2k=1+21+22+...+2n

    根据公式:
    这里写图片描述
    NodesNum=2n+1121=2n+11



这里写图片描述
2. 因此,当我们想求得数组中 下标为idx 的孩子节点的 位置,其计算方式如下:
idxw::2w+11<idx

2w+11w(w)

w=log2(idx+1)11

idxwidxidx

s=idx(2w+11+1)=idxidx(2w+11+1)idx

ci1=(2w+1+11+1)+2s,ci2=ci1+1

2w+1+11+1)idx+1idx()2sidx

  1. 举例说明: 如求得节点3的孩子节点的下标编号
    • 求得3节点的上一层w=log2(3+1)11=0
    • 3332(w+1)1+1=1
    • 3:2w+1+1+1=4
    • ci1=4+21=6,ci2=7