1.什么是树
树是数据结构中的一种,其属于非线性数据结构结构的一种,我们前文所提到的数据结构多数都是线性的,这也是较为简单的数据结构,而接下来的树与图均属于非线性数据结构,也是概念极多的一类。
树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)有多个附加结点,所有结点构成一个多级分层结构。
树的定义:n个节点组成的有限集合。n=0,空树;n>0,1个根节点,m个互不相交的有限集,每个子集为根的子树。
如图所示,图为一颗树:
2.树的基本术语
l 节点的度:树中某个节点的子树的个数。
l 树的度:树中各节点的度的最大值。
l 分支节点:度不为零的节点。
l 叶子节点:度为零的节点。
l 路径:i->j;路径长度:路径经过节点数目减1。
l 孩子节点:某节点的后继节点;双亲节点:该节点为其孩子节点的双亲节点(父母节点);兄弟节点:同一双亲的孩子节点;子孙节点:某节点所有子树中的节点;祖先节点:从树节点到该节点的路径上的节点。
l 节点的层次:根节点为第一层(以此类推);树的高度:树中节点的最大层次。
l 有序树:树中节点子树按次序从左向右安排,次序不能改变;无序树:与之相反
l 森林:互不相交的树的集合。
3.树的性值
l 树的节点树为所有节点度数加1(加根节点)。
l 度为m的树中第i层最多有m^(i-1)个节点。
l 高度为h的m次树至多(m^h-1)/(m-1)个节点。
l 具有n个节点的m次树的最小高度为logm( n(m-1) + 1 ) 向上取整。
4. 二叉树简介
二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。
如图
如图,每一个结点中最多拥有一个左结点和一个右结点,并没有多余的结点,这是很明显的二叉树的特征
5. 二叉树的特点
由二叉树定义以及图示分析得出二叉树有以下特点:
1)每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。
2)左子树和右子树是有顺序的,次序不能任意颠倒。
3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。
6. 二叉树的性质
二叉树具有以下几种特征
性质1:二叉树第i层上的结点数目最多为 2的(i-1)次方个节点(i≥1)。
性质2:深度为k的二叉树至多有2的k次方-1个结点(k≥1)。
性质3:包含n个结点的二叉树的高度至少为log2 (n+1)。
性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1。
7. 几种特殊的二叉树
l 斜树
斜树:所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树。
如图为一颗左斜树
l 满二叉树
满二叉树:在一棵二叉树中。如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。
满二叉树的特点有:
1)叶子只能出现在最下一层。出现在其它层就不可能达成平衡。
2)非叶子结点的度一定是2。
3)在同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多。
如图为一颗满二叉树
l 完全二叉树
完全二叉树:对一颗具有n个结点的二叉树按层编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。
如图为一颗完全二叉树