一、性质
1、在二叉树的第i层上至多有个结点(i>=1)
2、深度为k的二叉树至多有个结点(k>=1)
注:以上两条考虑满二叉树即可
3、对任意一棵二叉树,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1
证明:
设度为1的结点数为n1,则二叉树结点总数为n=n0+n1+n2
总连接数=n-1=n1+2*n2
所以n0+n1+n2-1=n1+n2+n2
所以n0=n2+1
4、具有n个结点的完全二叉树的深度为
具有n个结点的满二叉树的深度为
证明:
深度为k的完全二叉树的结点个数应介于深度为k-1的满二叉树结点数与深度为k的满二叉树结点数之间,
即2^(k-1)-1<=n<=2^k-1
由于n是整数,故2^(k-1)<=n<2^k
不等式两边同时取对数,得k-1<=log2n<k
由于k必取整,故k=所求
5、如果对一棵有n个结点的完全二叉树按层序编号,则对任一结点i(1<=i<=n)有以下性质:
- 若i=1,结点i为二叉树的根,无双亲;若i>1,其双亲为
- 若2i>n,则结点i无左孩子,即结点i为叶子结点;否则其左孩子为2i
- 若2i+1>n,则结点i无右孩子;否则其右孩子结点为2i+1
二、存储结构
前面我们介绍树的存储结构曾说由于双亲,孩子,兄弟之间的复杂关系,无法用简单的顺序存储结构或链式存储结构存储。但是由于二叉树结构的特殊性,使得顺序存储与链式存储都能简单实现
1、顺序存储结构
二叉树的顺序存储就是用一维数组存储二叉树中的各个结点,并且完全二叉树结点的存储位置能体现结点直接的逻辑关系,对于一般二叉树,尽管层序编号不能反映逻辑关系,但也能按照完全二叉树编号方式修改,不存在结点用“^"代替即可。
2、链式存储(二叉链表)
二叉链表结点=左孩子指针域+数据域+右孩子指针域
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BY ZJQ