树:是n(n≥0)个结点的有限集合。如果该集合为空,称为空树。在任意一棵非空树中:
2)其他结点可分为若干个互不相交的子集,而且每一个子集本身又是一棵树,称为根的子树。
基本术语:
结点:数据元素+若干指向子树的分支
结点的度:结点分支的个数,即子树的数目
树的度:树中所有结点的度的最大值
叶子结点:度为零的结点,也称终端结点
分支结点:度大于零的结点
————————————————————————————————————————————————————————
森林:是 m(m≥0)棵互不相交的树的集合
————————————————————————————————————————————————————————
二叉树或为空树;或是由一个根结点加上两棵分别称为左和右子树的、互不交的二叉树组成。
特点:
1)每个结点最多只有两棵子树;
2)两颗子树有左右之分,顺序不能换。
特殊的二叉树:满二叉树
满二叉树:指的是深度为k且含有2^k-1个结点的二叉树。
特点:1)每一层上的结点数都是最大结点数;
2)叶子结点都在最后一层。
特殊的二叉树:完全二叉树
完全二叉树: 树中所含的 n 个结点和满二叉树中编号为 1 至 n 的结点一一对应
特点:1)除了最下一层外其余各层都是满的;
2 )最下一层的结点都集中在该层的左侧二叉树的性质
性质 1 : 满二叉树的第 i 层上有 2^( i-1) 个结点 (i ≥ 1)性质1的推论:在二叉树的第i层上至多有2^(i-1) 个结点(i≥1)。
性质2:深度为k的满二叉树共有2^k-1个结点(k≥1)。
性质2的推论:深度为k的二叉树上最多有2^k-1个结点(k≥1)
性质3:设二叉树叶子结点数为n0,度为2的结点数为n2,则必存在关系式:n0 = n2+1。
性质4:具有n个结点的完全二叉树的深度为 向下取整(log2(n))+1
性质5:对于具有n个结点的完全二叉树,如果按照从上到下和从左至右的顺序对二叉树中的所有结点从1至n进行编号,则对于任意的序号为i的结点,有:
————————————————————————————————————————————————————————
二叉树存储结构
顺序存储结构:
用一组连续的存储单元存储二叉树的数据元素,以结点存储的相对位置表示结点之间的关系。为了正确地反映结点之间的关系,任何二叉树都必须按照完全二叉树的形式来存储.这种存储方式对某些二叉树的存储会造成存储空间的浪费。
链式存储结构:1.二叉链表 2.三叉链表
二叉链结构每个结点包含三个域:数据域和左右指针域,如下表所示
三叉链表结构:每个结点除包含数据域和左右指针域外,还包含一个指向其双亲结点的指针域。
二叉树的遍历
遍历二叉树是指按照一定的规律对二叉树中的每个结点,访问且仅访问一次的处理过程。“访问”的含义可以很广,如:求结点的度、层次、输出结点的信息等等。
“遍历”是任何类型均有的操作,
1)对线性结构而言,只有一条搜索路径(因为每个结点均只有一个后继),故不需要另加讨论。
2)而二叉树是非线性结构,每个结点有两个后继,则存在如何遍历即按什么样的搜索路径进行遍历的问题。
对“二叉树”而言,可以把二叉树看成由三个基本单元组成:根结点(D)、左子树(L)、右子树(R),并且规定左子树上的所有结点应该在右子树上的所有结点之前被访问,由此可以得到三种遍历顺序:先序遍历(DLR)、中序遍历(LDR)、后序遍历(LRD)
先序的遍历算法--->根左右(A B D E G C F)
若二叉树为空树,则空操作;否则,
(1)访问根结点;
(2)先序遍历左子树;
(3)先序遍历右子树。
中序的遍历算法---->左根右(D B G E A C F)
若二叉树为空树,则空操作;否则,
(1)中序遍历左子树;
(2)访问根结点;
(3)中序遍历右子树.
后序的遍历算法--->左右跟(D G E B F C A)
若二叉树为空树,则空操作;否则,
(1)后序遍历左子树;
(2)后序遍历右子树;
(3)访问根结点。
————————————————————————————————————————————————————————————————————
定义:
在一棵树中节点的层数比其父节点的层数要高一些(根节点在第0层)
树的高度就是树中节点层数中的最大值。
树的路径长度就是所有树节点的层数的总和。
二叉树的内部路径长度是树的所有内部节点的层数的总和。
二叉树的外部路径长度是树的所有外部节点的层数总和。
树的数学性质:
1.一棵有N个内部节点的二叉树有N+1个外部节点
2.一棵有N个内部节点的二叉树有2N个连接:N-1个连接到内部节点,N+1个连接到外部节点。
3.任何带有N个内部节点的二叉树的外部路径长度比内部长度大2N。
4.带有N个内部节点的二叉树的高度至少是lgN,至多是N-1
5.带有N个内部节点的二叉树的内部路径长度至少是Nlg(N/4),至多N(N-1)/2
——————————————————————————————————————————————————
小贴士----》如何记住树的遍历方法:
前序遍历 : 根左右
中序遍历: 左根右
后序遍历: 左右根
注意观察”根“字的位置,根在最前面的是前序,根在中间的是中序,根在最后的为后序!!!