6.2.1二叉树的性质
1.二叉树
性质:
1.若二叉树的层次从1开始,则在二叉树的第i层最多有2^(i-1)个结点
2.深度为k的二叉树最多有2^k -1个结点 (k>=1)
3.对任何一颗二叉树,如果其叶结点个数为n0,度为2的非叶结点个数为n2,则有 n0=n2+1
4.具有n个结点的完全二叉树的深度为 [log₂n]+1 //log以2为底的n
5.
2.完全二叉树:
特点:
1.只允许最后一层有空缺结点且空缺在右边,即叶子结点只能在层次最大的两层上出现;‘
2.对任一结点,如果其右子树的深度为L,则其左子树的深度必为 L 或 L+1
【总结】:
1.若每层仅有一个结点,则树高h为1025;且其最小树高为 log₂1025 + 1=11,即h在11至1025之间。
2.深度为h的满m叉树共有mh-1个结点,第k层有mk-1个结点。
6.2.2二叉树的存储结构
1.顺序存储结构(数组表示)
n个结点的二叉树,根节点编号为1,其余结点自上到下,自左到右编号,然后将完全二叉树上编号为 i 的结点依次存储在一维数组中下标为 i-1 的元素中。
代码:
#define MAX_TREE_SIZE 100
typedef TElemTypeSqBiTree[MAX_TREE_SIZE];
SqBiTree bt;
:数组表示:没有元素的结点也要空开相应位置
特点:非完全二叉树就会浪费很多存储空间,单支书就是一种极端情况,比如一个深度为k的有k个结点的单支书就需要2^k -1的一维数组
2.链式存储结构
链表中一个结点相应地粗存储二叉树的一个结点
二叉链表:
每个结点包含两个指针域和一个数据域,分别用来储存指向二叉树中结点的左右孩子的指针和结点信息
【图】
代码
tyoedef sttuct BiTNode{
TElemType data;
Struct BiTNode*lchild,*rchild;
}BiTNode,*BiTree;
三叉链表:
每个结点包含三个指针域和一个数据域用来指向该结点的双亲结点
【图】