性质1:在二叉树的第i层上至多有2i-1个结点(i≥1),至少有1个结点
性质2:深度为K的二叉树至多有2k-1个结点(k≥1),至少有k个结点
性质3:对任何一棵二叉树T,如果其叶子树为n0,度为2的结点数为n2,则n0=n2+1(结点数=度为2的分支数+1)
两种特殊形式的二叉树:
(1)满二叉树:一棵深度为k且有2k-1个结点的二叉树称为满二叉树
特点:1)每一层上的结点数都是最大结点数(即每层都满)
2)叶子结点全部在最底层
对满二叉树结点位置进行编号
编号规则:从根结点开始,自上而下,自左而右
每一结点位置都有元素
满二叉树在同样深度的二叉树中结点个数最多,在同样深度的二叉树中叶子结点个数最多
(2)完全二叉树:深度为k的具有n个结点的二叉树,当且仅当其每一个结点都有深度为k的满二叉树中编号为1~n的结点一一对应时,称之为完全二叉树
注:在满二叉树中,从最后一个结点开始,连续去掉任意个结点,即是一棵完全二叉树
特点:1)叶子只可能分布在层次最大的两层上
2)对任一结点,如果其右子树的最大层次为i,则其左子树的最大层次必为i或i+1
性质4:具有n个结点的完全二叉树的深度为[log2n]+1
性质5(表明完全二叉树中双亲结点编号与孩子结点编号之间的关系):如果对一棵有n个结点的完全二叉树(深度为[log2n]+1)的结点按层序编号(从第1层到第[log2n]+1层,每层从左到右),则对任一结点i(1≤i≤n),有:
(1)如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点[i/2]
(2)如果2i>n,则结点i为叶子结点,无左孩子;否则,其左孩子是结点2i
(3)如果2i+1>n,则结点i无右孩子;否则,其右孩子是结点2i+1
二叉树的存储结构
(1)顺序存储结构:
实现:按满二叉树的结点层次编号,依次存放二叉树中的数据元素
// 二叉树顺序存储表示
#define MAXTSIZE 100
Typedef TElemType SqBiTree[MAXTSIZE]
SqBiTree bt;
二叉树的顺序存储缺点:结点间关系蕴含在其存储位置中,浪费空间,适于存满二叉树和完全二叉树
(2)链式存储结构
二叉链表存储结构:
typedef struct BiNode{
TElemType data;
struct BiNode lchild, rchild;//左右孩子指针
}BiNode,BiTree;
三叉链表:
typedef struct TriTNode{
TElemType data;
struct TriTNode lchild, parent,rchild;//左右孩子指针
}TriTNode,*TriTree;
