树的定义
树的定义:在编程中,树是一种数据结构,他用于表示具有层次关系的数据。
根:树的根节点是树的起点。其他节点则按照层次关系连接到根节点。
度:为它们的连接。
树的叶子节点:是指度为0的节点,也称为终端节点。分支节点则是指度不为0的节点,也称为非终端节点。在一棵树中,除了叶节点之外的所有节点都是分支节点。
树的度:指度最多的一个节点,度的数量。
孩子:指1个节点分出的2个子节点
双亲:每个节点的双亲节点是与它相连并在它之上的一个节点。除根节点外,每个节点都只有一个双亲节点。
兄弟:每个节点包含多个指针分别指向第一个孩子节点和其他的兄弟节点。
层次:树的层次从根节点开始计算,根结点算为第一层,其孩子节点算为第二层,以此类推。
树的深度:是根节点到最深层叶子节点的最长路径长度。
森林:多个树
无序树:节点与节点之间没有逻辑关系的树。
有序树:节点之间拥有逻辑关系的树。
树的存储与表示
孩子表示法:每个节点包含两个指针,分别指向其第一个孩子节点和其兄弟节点。具体地,对于一个节点而言,其第一个孩子节点可以通过其左指针找到,而其兄弟节点可以通过其右指针找到。如果一个节点没有孩子节点,那么其左指针指向空;如果一个节点没有兄弟节点,那么其右指针指向空。
兄弟表示法:一个节点,包含两个指针,一个是孩子节点,一个是兄弟节点。一个节点包含多个孩子,我们通过其中一个孩子去寻找他的兄弟,不必逐级上下便利,整棵树大大提升效率。
双亲表示法:也称父节点表示法,每个节点存储自己父节点的位置,以便快速的找到自己的父节点信息。
图的定义
图的定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成。通常表示为 G(V,E),其中 G 表示一个图,V 是图 G 中顶点的集合,E 是图 G 中边的集合。在图中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示。
有向图:边有方向。
无向图:边无方向。
度:该顶点点的边
出度:该顶点的出发其他节点的边的数量,也就是说,以此顶点为开始的边的数量。
入度:该顶点的指向其他节点的边的数量,也就是说,以此顶点为结束的边的数量。
自环:边从该顶点出发后未经其他顶点又回到了该节点。
重边:边被重复经过,就是开始与结尾都相同的两条边。
路径:路径是指从一个顶点到另一个顶点所经过的顶点和边的序列。路径的长度是指路径上边的数量,即起点和终点之间的步数。
行迹:只要路径经过的边全都是唯一的,就称作行迹。
回路:该顶点的边经过了其他节点以后,又回到了该顶点。也就是封闭的行迹。
圈:封闭的路径,为起点与结束相重合的路径。
桥:假设一个图可以任何一个顶点到达任意一个顶点(也就是任意两个顶点之间都有路径),如果将一条边取下来,这个图就不满足上面那个条件了,那么这条边叫做图的桥。
割点:还是以上那个条件,如果将一个顶点取下来,不满足以上条件,那么这个节点就称作图的割点。
子图:指一个图中顶点和边的集合。
简单图与多重图:简单图是指两个顶点之间只有唯一条边相连,且任意一条边只有两个顶点关联。多重图是指允许同一条边连接一对顶点多次,即包含重复边的图。
稀疏图与稠密图:边较为稀疏的图,叫做稀疏图,边较为稠密的图,叫做稠密图。
连通:两个顶点之间有路径可以相互到达。
连通分类:无向图:在一个无向图中,一个连通子图是一个连通分量,其中任意两个顶点之间都存在路径。换句话说,一个连通分量是原图的一个极大连通子图,其中任意两个顶点都可以通过路径相连。
有向图:在有向图中,连通分类的概念有所不同。有向图中的连通子图可以分为强连通分量、单向连通分量、弱连通分量等不同类型。强连通分量是指有向图中任意两个顶点之间都存在从起点到终点的路径和从终点到起点的路径的连通子图;单向连通分量是指有向图中存在从起点到终点的简单路径,但不一定存在从终点到起点的简单路径的连通子图;弱连通分量则是指将有向图的所有的有向边替换为无向边后得到的图的连通子图。
邻接矩阵:邻接矩阵是表示图的一种方法,其中每个元素表示对应顶点之间的边的关系。在无向图中,邻接矩阵是一个对称矩阵,其中元素M[i][j]表示顶点i和顶点j之间是否存在边。如果存在边,则M[i][j]=M[j][i]=1;如果不存在边,则M[i][j]=0。对于有向图,邻接矩阵是一个非对称矩阵,其中元素M[i][j]表示从顶点i到顶点j是否存在边。如果存在边,则M[i][j]=1;如果不存在边,则M[i][j]=0。
邻接表:邻接表是一种存储图的数据结构,其中每个顶点用一个表来表示,表中存储与该顶点相邻的顶点信息。邻接表适合表示稀疏图,即图中边的数量相对较少的情况。
链式前向星:链式前向星是一种改进后的数据结构,基于前向星(一种边集数组)的优化。在链式前向星中,每个元素都通过指针链接在一起,形成一个链表结构。这种数据结构不需要排序操作,就能快速地找到以某个点为起点的所有边。