一、二叉树的基本概念
把满足以下概念的树形结构叫做二叉树:
(1)每个结点的度都不大于2;
(2)每个 结点的孩子结点次序不能任意颠倒。
二、二叉树的性质
- 在二叉树的第i个结点上至多有2^(i-1) 个结点(i>=1);
- 深度为k的2叉树至多有2^k -1个结点;
- 对任意一颗二叉树T,若终端结点数为n0,而其度数为2的结点数为n2,则n0=n2+1;
- 具有n个结点的完全二叉树的深度为[log2(n)]+1;
- 对于具有n个结点的完全二叉树,如果按照从上到下和从左到右的顺序对二叉树中的所有结点从1开始顺序编号,则对于任意的序号为i的结点有:(1)如i=1,则序号为i的结点是根结点,无双亲结点,如i>1,则序号为i的结点的双亲结点序号为i/2;(2)如2*i>n,则序号为i的结点无左孩子,如2*i<=n,则序号为i的结点的左孩子结点序号为2*i;(3)如2*i+1>n,则序号为i的结点无右孩子,如2*i+1<=n,则序号为i的结点的右孩子结点序号为2*i+1;
上图中左为满二叉树、右为完全二叉树。
满二叉树是完全二叉树、完全二叉树不一定是满二叉树。
三、二叉树的存储结构
二叉树的结构是非线性的,每个结点最多有两个后继;
二叉树的存储结构有两种:顺序存储结构和链式存储结构
顺序存储:
A | B | C | D | E | F |
A | B | C |
这种存储方式对于一棵完全二叉树是非常方便的,对于非完全二叉树,则是非常浪费空间的。
链式存储:
结点定义:
typedef struct Node{
DataType data;
struct Node * LChild;
struct Node * RChild;
}
存储结构如上图所示。若一个二叉树含有n个结点,则它的二叉树链表中必含有2n个指针域,其中必有n+1个空的链域。