1.树的概念
树是一种非线性的数据结构,是由n(n>=0)个结点组成的有限集合。
- 树的优点
树结合另外两种数据结构的优点:
一种是有序数组,另一种是链表。在树中查找数据项的速度和在有序数组个查找一样快,并且插入数据项和删除数据项的速度也和链表一样。
2.相关概念
-
根
树有且仅有一个特定的称之为根(Root)的结点,它只有直接后继,但没有直接前驱。 -
结点
使用树结构存储的每-一个数据元素都被称为“结点” -
父结点(双亲结点)
对于结点A、B、C、D来说,A是B、C、D结点的父结点。 -
孩子结点
B、C、D都是A结点的子结点。 -
兄弟结点
对于B、C、D来说,它们都有相同的父结点,所以它们互为兄弟结点。 -
树根结点(简称“根结点”)
每一个非空树都有且只有一个被称为根的结点。结点A就是整棵树的根结点。 -
叶子结点
如果结点没有任何子结点,那么此结
点称为叶子结点(叶结点)。结点K、L、F、G、M. I、J都是这棵树的叶子结点。
-
度
一棵树的度是树内各结点的度的最大值(二叉树的度是2)
对于一个结点,拥有的子树数
(结点有多少分支)称为结点
的度(Degree) -
层次
一棵树的深度(高度)是树中结点所在的最大层次(深度搜索的递归)。
从一棵树的树根开始,树根所在层为第一层,根的孩子结点所在的层,为第二层,依次类推。
A结点在第一层,
B、C为第二层,
D、E、F、G第三层
H、I、J在第四层
-
空树
如果n=0,树为空数 -
子树
除根结点以为的结点划分为m(m>=0)个互不相交的有限集合,T0,T1,T2…Tm-1 ,每个结点是一棵树,称为根结点的子树。
3.树的分类
4.二叉树
-
定义:
一棵二叉树是结点的一个有限集,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的互不相交的二叉树组成。 -
特点
每个结点至多只有两棵子树(二叉树中不存在度大于2的结点)。 -
二叉树五种基本形态
-
二叉树和树的比较
(1)二叉树可为空,而树不可以(至少要有根节点)
(2)二叉树的子树有顺序关系,而树没有
(3)二叉树的分支度比为0、1、2,而树的分支度可大于2
. 二叉树的性质
(1)在二叉树的第i层至多有2^(i-1) (2的i-1次方)个结点。(i >=1)
(2)深度为k的二叉树至多有2^k-1(2的k次方减1)个结点。(k >=1)
(3)完全二叉树T,如果其叶结点为n,深度k=log2n +1
- 满二叉树
一颗深度为k且有2^k -1个结点的二叉树叫满二叉树
- 完全二叉树
若设二叉树的高度为h,则共有h层。除第h层外,其它各层(1- (h-1))的结点数都达到最大个数,第h层从右向左连续缺若干结点,这就是完全二叉树。
5.二叉树的存储结构
-
顺序存储结构
对完全二叉树而言,顺序存储结构既简单又节省存储空间。利用数组实现
-
链式存储结构
对非完全二叉树,使用顺序表存储会存在空间浪费的现象。
链式存储结构采用链表存储二叉树中的数据元素,用链建立二叉树中结点:之间的关系。二叉树最常用的链式存储结构是二叉链。
每个结点包括三个域,数据元素域data、左孩子lChild,右孩子rChild,结点结构为:
6.二叉查找树(BST tree)
- 左子树(left subtree)
左子树下的每个后代结点的值都小于结点n的值 - 右子树(rigth subtree)
右子树下的每一个后代结点的值都大于结点n的值。
7.几种二叉树的对比
- 二叉树
每个结点最多2棵子树,没有其它限制了。 - 二叉查找树
也叫二叉搜索树,首先它是二叉树,并且左子树上所有结点的值小于它根结点的值,右子树上所有结点的值大于它根结点的值。 - 二叉排序树
就是二叉查找树 - 二叉平衡树
更加准确的应该叫"平衡二叉树",它是"平衡二叉搜索树"的简称。首先它是"二叉搜索树",其次,它是平衡的,即是它的每一个结点的左子树的高度和右子树的高度差至多为1。