满二叉树
定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。
也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。
一颗树深度为h,最大层数为k,深度与最大层数相同,k=h;
它的叶子数是: 2^h
第k层的结点数是: 2^(k-1)
总结点数是: 2^k-1 (2的k次方减1)总节点数一定是奇数。
完全二叉树
一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。
完全二叉树的节点数是任意的,从形式上讲它是个缺失的的三角形,但所缺失的部分一定是右下角某个连续的部
分,最后那一行可能不是完整的,对于k层的完全二叉树,节点数的范围2^ (k - 1) -1 < N< 2^k - 1;
设二叉树的深度为h,除第 h 层外,
其它各层 (1~h-1) 的结点数都达到最大个数,
第 h 层所有的结点都连续集中在最左边,
这就是完全二叉树。
含义区别
汉语: 满和完全差不多是一个意思
英文在此处的含义:与满二叉树中编号为i的结点在二叉树中的位置相同,完全重合
属性区别
满二叉树是完全二叉树的特殊形态, 即如果一棵二叉树是满二叉树, 则它必定是完全二叉树。
完全二叉树不一定是满二叉树。
为什么说使用完全二叉树易于存储且便于索引?
1. 怎么易于存储呢?使用一个数组就可以完全存储一棵二叉树。
2. 怎么便于索引呢?假设每个node的标为i, 那么他的左子节点就是2*i, 右子节点就是2*i+1。