定义
对一棵有n个节点的二叉树按层序编号,如果编号为i(1<=i<=n)的节点与同样深度的满二叉树中编号为i的节点在二叉树中位置完全相同,则这棵树称为完全二叉树。
理解
这个定义,我反正第一遍看过去没啥感觉。后来才知道,是这个意思。
每一层,从左到右,从碰到缺少子树的结点开始,左侧的兄弟节点一定是满的,右侧的兄弟节点一定是叶子节点,并且缺少子树的节点要么全都缺,要么只能缺右子树。如下图。树1就不符合完全二叉树,5号节点有右子树,没左子树。树3也不符合,5号节点缺枝少叶,但其右侧的兄弟节点却有孩子。而树2就符合完全二叉树。
我们可以看到,按图中,给每个节点从左到右,从小到大,编号。那么完全二叉树的编号是连续的。不完全二叉树数字不连续。
为什么要这样定义
可以看出来如果我们存储一棵这样的树,我们就可以按照从左到右从上到下的顺序,将每个节点存储到一段连续的存储空间中。虽然还不是很透彻,不过又是一个和“从哪里取,放到哪里”的故事。