Algorithm 3: Complete binary tree
完全二叉树及其性质(可用于heapsort等)
如下图所示,是一棵近似的完全二叉树,以此举例说明。(b)是该树用 数组的存储的表示形式,其中数组中的连线部分,代表着后面被连线的元素是前一个元素的孩子节点。
下面描述,如何通过完全二叉树的相关性质 对于数组中位置下标为 idx 的元素,快速找到其孩子节点的元素在数组中的下表位置ci1,ci2
- 完全二叉树的 节点总数 为
2(n−1)−1 个。设k为完全二叉树的第k层(从第0层起),nodek=2k n为完全二叉树的总层数,则:NodesNum=∑k=0n2k NodesNum=∑k=0n2k=1+21+22+...+2n
根据公式:∴NodesNum=2n+1−12−1=2n+1−1
2. 因此,当我们想求得数组中 下标为
- 举例说明: 如求得节点3的孩子节点的下标编号
- 求得3节点的上一层
w=⌈log2(3+1)−1⌉−1=0 -
求得3号节点所在层在3号节点之前的元素个数:3−2(w+1)−1+1=1。 -
求得3号节点孩子节点所在层的第一个元素的编号:2w+1+1+1=4 -
求得ci1=4+21=6,ci2=7
- 求得3节点的上一层