目录
一,树
树的基本概念
如果数据之间具有层次关系(从属关系),即下一层的数据元素和上一层的数据元素具有从属关系,这种关系称之为 树。
根:整个从属关系(层次关系)的开始位置.
树下面的树叫子树,子树的开始位置叫子树的根。
结点:树中的每一个数据元素。
结点的度:一个结点包含的子树的个数,即与结点之间具有从属关系的结点个数。
叶子结点:结点的度为零
树的度:树中最大的度。
子结点:这一层结点与上一层结点的关系
父结点:这一层结点与下一层结点的关系
兄弟结点:子结点之间拥有共同的父结点
结点的层次:根结点称为树的第一层,从根结点开始,以下的每一层为树的n+1层。
树的深度:树中层次最大的层次。
有序树:兄弟结点是有序的不能交换
注:树的根结点没有前驱,除根结点外的所有结点有且只有一个前驱;树中所有结点可以有零个或多个后继。
二,二叉树
1, 二叉树的概念:
二叉树是另一种树形结构,其特点是每个结点至多只有两棵子树且左右分明,即:左右节点不能进行交换。
⼆叉树的第i层最多有2^(i-1)个结点; 深度为k的⼆叉树最多有2^k - 1个结点; 对于任意⼆叉树,叶⼦结点n0,度为2的结点n2: n2 = n0 -1
2,满二叉树和完全二叉树
满二叉树:每⼀层都有2^(i-1)个结点,每⼀层都是最多结点
完全二叉树:如果有k层,从根结点开始到k-1层,每⼀层都是2^(i-1),即k-1层为满⼆叉树,第k层从开始到结束结点,中间没有任何跳过结点,就叫做 完全⼆叉树
3,二叉树的存储
2.1,顺序存储
树的元素进⾏存储时,根节点从编号(下标)为1开始存储,左⼦结点存储到 2i(i表⽰⽗节点的位置编号),右⼦结点存储到2i+1位置
如果结点有⽗节点,⽗节点编号为 i(当前结点下标编号)/2
如果有左⼦结点,编号为2i(当前结点下标编号)
如果有右⼦结点,编号为2i+1(当前结点下标编号)
2.2,链式存储
用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。
结点: struct node
{
data
struct node * lchild , * rchild;
};
4,二叉树的遍历
4.1,层次遍历
① 先序遍历:先遍历根结点,然后遍历左⼦树,最后遍历右⼦树。即:每次都是先遍历左子树结点的数据元素,只有当左节点的所有元素都遍历完之后才会遍历右节点的数据元素。
② 中序遍历:先遍历左⼦树,然后遍历根结点,最后遍历右⼦树 ,即:先观察左节点下的结点有无有就看下一层,没有就开始遍历,只有遍历了当前左节点中的结点再遍历根节点最后遍历右节点
③ 后序遍历:先遍历左⼦树,然后遍历右⼦树,最后遍历根结点。