1.完全二叉树
在上一节我们看到,就优先级队列的实现方式而言,采用基本的向量结构并不足够,而采用更高级的树形结构,虽然完全可以高效率地实现优先级队列,但却有杀鸡用牛刀之嫌。那么能否在这两种策略之间设计一种折中的方案呢?
答案是肯定的,为此我们需要以向量为形,以树形结构为神,实现二者之间的有机结合。
为此,我们需要借助完全二叉树。所谓的 ”Complete Binary Tree“, 可以认为是 AVL 树的一个特例,其中的平衡因子处处非负。也就是说各节点的平衡因子或者为0,或者为 +1,但绝对不可能是-1。
而且对于树中的任何一个节点 V 而言,如果它的平衡因子为 0,那么左子树就必然是满树。另一种可能,如果 v 的平衡因子为 +1,那么它的右子树就必然是满树。由这些约定不难推知,就全局的拓扑结构而言,完全二叉树大致应该呈现为这样一种形式。
也就是说,如果忽略它的最底层,那么其余节点应该组成一棵满树。而最底层也只不过是缺失了右侧的连续一段。