1.树
树形结构是一种典型的非线性数据结构,体现在数据元素之间有明显的层次关系。
1.1树的定义
树是由n个节点构成的有限集合,n大于等于零,节点数为零的树称为空树,节点数大于零的树称为非空树。
一棵非空树满足以下条件:
a.有且仅有一个被称为根(R)的特殊节点,其余所有节点都可由根节点经过一定的分支得到,而根结点R没有前驱节点。
b.当n>1时,除根节点R外的其它节点被分成m个互不相交的子集,T1,T2,....Tm,其中每个子集Ti本身又是一棵树,被称为R节点的子树。
树的定义是递归定义,即每个子树的定义也是按照上面的过程完成的。
相关名词:
c.节点:节点由数据元素和构造元素之间关系的组成。
d.节点的度:节点拥有的子树的个数称为该节点的度。
e.树的度:树中各节点度最大值称为该树的度。
f.叶子节点:将度为0的节点称为叶子节点,又称为终端节点。
g.分支节点: 将度不为0的节点称为分支节点,又称为非终端节点。
h.节点的层次:从根节点到树中某节点所经路径上的边数加1称为该节点的层次。
j.树的深度:树中所有节点的层次的最大值称为该树的深度。
2.二叉树
2.1二叉树的定义
二叉树是由n个节点构成的有限集合,n大于等于零,每个节点的最多有两个子树的有序树。
二叉树的特点如下:
a.二叉树是有序树,即使只有一个子树,也必须区分左、右子树。
b.二叉树的每个节点的度不能大于2,只能取0、1、2三者中的一个。
c.二叉树中所有节点的形态有5种,空节点、无左右子树的节点、只有左子树的节点、只有右子树的节点、同时具有左右子树的节点。
2.2二叉的性质
性质1 二叉树的第i层上最多有2i-1个节点。
性质2 深度为h的二叉树上最多有2h-1个节点
性质3 具有n个节点的二叉树的高度不小于Log2(n+1)的最大整数
性质4 在任意一棵二叉树中,如果叶子节点的个数为n1,度为2的节点个数为n2,则n1=n2+1.
性质5 具有n个节点的完全二叉树的高度为Log2(n+1)。
性质6 假定对一颗有n个节点的完全二叉树中的节点,按从上到下,从左到右的顺序,从1到n编号,设树中某一个节点的序号为i,i<=i<=n.同,则有如下关系:
①若i等于1,则该节点为二叉树的根。
②若i大于1,则该节点喘气双亲节点的序号为i/2.
③若2i<=n,则该节点的左孩子节点的序号为2i,否则该 节点无左孩子节点。
④若2i+1<=n,则该节点的右孩子节点的序号为2i+1,否则该节点无右孩子节点。
满二叉树:若深度为h的二叉树,恰好具有2h-1个节点则该树称为满二叉树。
完全二叉树:若一棵具有n个节点的二叉树的逻辑结构与满二叉树的前n个节点的逻辑结构完全相同,则称该二叉树为完全二叉树。
扩充二叉树:除叶子节点外,其余节点都必须有两个孩子的二叉树。
2.3二叉树的存储结构
二叉树的存储结构有顺序存储结构 、链式存储结构和仿真指针存储结构
a.顺序存储结构
顺序存储结构也就是采用一维数组存储的。根据二叉树的性质6可以计算出双亲节点、左右孩子节点的下标。因此满二叉树、完全二叉树的存储可采用一维数组存储。
注意:一般的二叉树不宜采用顺序存储,这是由于如果采用该方法存储,不能确定一棵普通二叉树的各种关系。如果需要采用顺序存储结构存储一棵普通二叉树,可为一棵普通的二叉树增添一些并不存在的节点使之变成完全二叉树的形态,然后再采用顺序存储结构存储。
b.链式存储结构
链式存储结构采用链表存储二叉树中的数据元素。
二叉树中最常见的链式存储结构是二叉链,每一个节点包含3个域,分别是数据元素或data,左孩子域lChild和右孩子域rChild,
其节点结构:
二叉树的二叉链存储结构是常用的存储结构,
优点:结构简单,可方便地构造任何二叉树,可实现二叉树的大多数操作。
缺点:难以查找当前节点的双亲节点。(可采用三叉链存储结构解决这个问题,就是在二叉存储结构上再增加一个双亲节点的链域parent)
c.仿真指针存储结构
二叉树的仿真指针存储结构使用数组存储二叉树中的节点。数组中的每个节点除数据域外,增加仿真指针域用于仿真常规指针构造二叉树中节点之间的逻辑关系。
3.二叉树的节点类及二叉树类
4.二叉树的遍历
5.线索二叉树
6.树和森林
7.树的应用
待续....