完全二叉树
若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层从右向左连续缺若干结点,这就是完全二叉树
完全二叉树特点
- 叶子结点只可能在最大的两层上出现,对任意结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙的最大层次必为L 或 L+1;
- 出于简便起见,完全二叉树通常采用数组而不是链表存储,其存储结构如下:
var tree:array[1…n]of longint;{n:integer;n>=1}
对于tree[i],有如下特点:- 若i为奇数且i>1,那么tree[i]的左兄弟为tree[i-1];
- 若i为偶数且i<n,那么tree[i]的右兄弟为tree[i+1];
- 若i>1,tree[i]的双亲为tree[i div 2];
- 若2i<=n,那么tree[i]的左孩子为tree[2i];若2i+1<=n,那么tree[i]的右孩子为tree[2i+1];
- 若i>n div 2,那么tree[i]为叶子结点(对应于(3));
- 若i<(n-1) div 2.那么tree[i]必有两个孩子(对应于(4))
完全二叉树叶子节点的算法
如果一棵具有n个结点的深度为k的二叉树,它的每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应,这棵二叉树称为完全二叉树。