🐱🐉树的相关概念
1、双亲、孩子和兄弟
2、结点的度:一个结点的子树的个数记为该结点的度。 3、叶子结点:也称为终端结点,指度为零的结点。 4、内部结点:度不为零的结点称为分支结点或非终端结点。除根结点之外,分支结点也称为内部结点。 5、结点的层次:根为第一层,根的孩子在第二层,依此类推。 6、树的高度:一棵树的最大层次数记为树的高度(或深度)。 7、有序(无序)树:若将树中结点的各子树看成是从左到右具有次序的,即不能交换,则称该树为有序树,否则称为无序树。 8、森林:m(m≥0)棵互不相交的树的集合。
二叉树
• 定义:二叉树是n(n≥0)个结点的有限集合,它或者是空树(n=0),或者是由一个根结点及两棵不相交的、分别称为左子树和右子树的二叉树所组成。 • 树和二叉树的区别:(1)二叉树中结点的子树要区分左子树和右子树,即使只有一棵子树,而树中不用区分。 (2)二叉树中结点的最大度为2,而树中无限制。
二叉树的性质
1、二叉树第i(i≥1)层上至多有2i-1个节点。 2、深度为k的二叉树至多有2k-1个结点(k≥1)。 3、对任何一棵二叉树,若其终端结点数为n0,度为2的结点数为n2,则 n0=n2+1。
满二叉树和完全二叉树
• 满二叉树的定义:若深度为k的二叉树有2k-1个结点,则称其为满二叉树。 • 完全二叉树:当深度为k、有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号为1~n的 结点一一对应时,称之为完全二叉树。
完全二叉树的性质
• 设深度为k的完全二叉树共有n个结点,那么可知,除第k层外,其余各层都有最多的结点数。 • 具有n个结点的完全二叉树的深度为INT(log2n)+1。 • 假设有编号为i的结点,则有: (1)若i=1,则该结点为根结点,无双亲;若i>1,则该结点的双亲结点为INT(i/2) (2)若2i≤n,则该结点的左孩子编号为2i,若2i>n,无左孩子。 (3)若2i+1≤n,则该结点的右孩子编号为2i+1,若2i+1>n,无右孩子。
二叉树存储结构
-
顺序存储:事先根据树的深度 k ,申请一个长度为 2^k - 1 的地址,然后按照一个一个的节点存储,节点若为空,地址也要空着。(适合完全二叉树存储)
-
链式存储:
- 二叉链表:每个节点存储三部分。左指针(指向左孩子)、节点信息、右指针(指向右孩子)。左右节点没有的话为空
- 三叉链表:每个节点存储四部分。左指针(指向左孩子)、节点信息、指向父节点的指针、右指针(指向右孩子)。左右节点或者父节点没有的话为空
二叉树的遍历
• 遍历是按某种策略访问树中的每个结点,且仅访问一次。 • 依据访问根结点次序的不同,可分为前序遍历法、中序遍历法、后序遍历法。 (1)中序遍历法:(左、根、右) A、中序遍历根的左子树。 B、访问根结点。 C、中序遍历根的右子树。 依此类推。 (2)前序遍历法:先访问根结点(根、左、右) (3)后序遍历法:后访问根结点(左、右,根) (4)层序遍历法:按层从上至下、每层从左至右的顺序遍历。
最优二叉树
• 最优二叉树又称哈夫曼树,是一类带权路径长度最短的树。 • 权:是一个人为的概念,表示计算机对每个结点的访问频率。 • 路径长度:是每一个结点到根结点的路径的长度。 • 结点的带权路径长度:是指从该结点到根结点之间的路径长度与该结点权的乘积。 • 树的带权路径长度为树中所有叶子结点的带权路径长度之和。
构造最优二叉树的哈夫曼方法:
(1)根据给定的n个权值{w1,w2,…,wn}构成n棵二叉树的集合F={T1,T2,…,Tn},其中每棵树Ti只有一个带权为wi的根结点,其左右子树均空。 (2)在F中选取两棵根结点的权值最小的树作为左右子树,构造一棵新的二叉树,置新构造二叉树的根结点的权值为其左、右子树根结点的权值之和。 (3)从F中删除这两棵树,同时将新得到的二叉树加入到F中。重复(2)(3)步,直到F中只含一棵树时为止,这棵树便是最优二叉树(哈夫曼树)。 • 最优二叉树的一个应用是对字符集中的字符进行编码和译码。
二叉查找树
• 二叉查找树又称为二叉排序树。它或者是一棵空树,或者是具有如下性质的二叉树: (1)若它的左子树非空,则左子树上所有结点的关键码值均小于根结点的关键码值。 (2)若它的右子树非空,则右子树上所有结点的关键码值均大于根结点的关键码值。 (3)左、右子树本身就是两棵二叉查找树。 • 对二叉查找树进行中序遍历,可得到一个关键码递增有序的结点序列。 • 二叉查找树的作用:使用二叉查找树来查找树中的数值比普通的二叉树更为方便。
🐱🐉图
图的定义
• 一个图G(Graph)是由两个集合:V和E所组成的,V是有限的非空顶点(Vertex)集合,E是用顶点表示的边(Edge)集合,图G的顶点集和边集分别记为V(G)和E(G),而将图G记作G=(V,E)。 • 可以看出,一个顶点集合与连接这些顶点的边的集合可以唯一表示一个图。 • 在图中,数据结构中的数据元素用顶点表示,数据元素之间的关系用边表示。
图的相关概念
- 有向图:图中每条边都是有方向的。从顶点vi到顶点vj表示为<vi,vj>,而从顶点vj到顶点vi表示为<vj,vi>。有向边也称为弧。起点称为弧尾,终点称为弧头。
- 无向图:图中每条边都是无方向的。顶点vi和vj之间的边用(vi,vj)表示。在无向图中,(vi,vj)和(vj,vi)表示的是同一条边。
- 完全图:若一个无向图具有n个顶点,而每一个顶点与其他n-1个顶点之间都有边,则称之为无向完全图。显然,含有n个顶点的无向完全图共有n(n-1)/2条边,类似地,有n个顶点的有向完全图中弧的数目为n(n-1),即任意两个不同顶点之间都存在方向相反的两条弧。
- 度:某个顶点与之相连的有几条边
- 出度和入度:某个顶点出去的边有几条,进来的边有几条(对于有向图来说)
- 路径:某个顶点到另外一个顶点经过的边就叫路径,有几条边就叫路径长度。(有向图需要考虑方向)
- 子图:一个图的顶点集合和边集合都是另外一个图的子集,那么这个图就是另外一个图的子图
- 连通图:任意两个顶点之间都有路径(对于无向图来说)
- 强连通图:任意两个顶点之间都有路径(对于有向图来说)
- 网:每个边都带权值的图叫网
图的存储结构
(1)邻接矩阵表示法:a(i,j) 代表从 i 到 j 是否有路径,有就在矩阵上添 1 ,没有就添 0.(无向图表示出来的矩阵是对称的),如果是网的话,有就用权值表示,没有就用 无限大 (∞)表示。
(2)邻接链表表示法: 邻接链表是为图的每一个顶点建立一个单链表,第i个单链表中的节点表示依附于顶点vi的表(对于有向图是以vi为尾的弧,建议去看一下图,有助于理解)。
\