1、树的定义
树是n(n>=0)个结点的有限集。当n = 0时,称为空树。在任意一棵非空树中应满足:
1.有且仅有一个特定的称为根的结点。
2.当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每个集合本身又是一棵树,并且称为根的子树。
显然,树的定义是递归的,即在树的定义中又用到了自身,树是一种递归的数据结构。树作为一种逻辑结构,同时也是一种分层结构,具有以下两个特点:
1.树的根结点没有前驱,除根结点外的所有结点有且只有一个前驱。
2.树中所有结点可以有零个或多个后继。
因此n个结点的树中有n-1条边。
2、基本术语
- 一个节点的子树的个数称为该节点的度数
- 一棵树的度数是指该树中节点的最大度数。
- 度数为零的节点称为树叶或终端节点,度数不为零的节点称为分支节点,除根节点外的分支节点称为内部节点。
- 结点的深度是从根结点开始自顶向下逐层累加的。
结点的高度是从叶结点开始自底向上逐层累加的。
3、二叉树具有如下最基本的性质
1.任意一棵树,若结点数量为n ,则边的数量为n − 1
2.二叉树第i(i>1)层上的节点最多为2^(i-1)个
3.深度为k(k≥1)的二叉树最多有2^(k)-1个节点。
4.满二叉树 :深度为k(k≥1)时有2^(k)-1个节点的二叉树。
5.完全二叉树 :只有最下面两层有度数小于2的节点,且最下面一层的叶节点集中在最左边的若干位置上。
6.具有n个节点的完全二叉树的深度为
(log2n)+1或 log2(n+1),log以2为底
顺序存储结构 :完全二叉树节点的编号方法是从上到下,从左到右,根节点为1号节点。
设完全二叉树的节点数为n某节点编号为i
1.当i>1(不是根节点)时,有父节点,其编号为i/2;
2.本身是叶节当2*i<=n时,有左孩子,其编号为2*i,否则没有左孩子,本身是叶节点
3.当2*i+1≤n时,有右孩子,其编号为2*i+1,否则没有右孩子
链式存储结构:
typedef int datatype;
typedef struct node
{
datatype data;//节点数据
struct node *left,*right;//左右孩子指针
}bitree;