树与图
在讲树之前,我们先看看图。因为树是图的一种特殊情况。
图
图论是组合数学的一个分支,和其他数学分支,如群论、矩阵论、拓扑学有着密切关系。图是图论的主要研究对象。图是由若干给定的顶点及连接两顶点的边所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系。顶点用于代表事物,连接两顶点的边则用于表示两个事物间具有这种关系。
维基百科对图论的介绍似乎有点让人困惑,那么回想一下链表的结构。
节点之间有着某种线性的关系,最终能通过这些关系将所有节点穿成一条链。这就是链表
而图,节点之间的关系不再是单一的指向性的关系,它可能会带有一些信息,譬如边的权重,边的指向等。
在很多数据结构的书里,图的关系都以二维数组的形式存储。一是实现简单,二是运算方便。
但我打算用哈希表来介绍图,较为直观,更容易理解,但本质都一样,表达节点之间的关系即可。来看下面一个有向图的代码
当边所携带的数据为权重时,这种图就叫有权图。当图中任意的两个节点的边都有对称性(A->B = B->A
),这种图叫无向图。当图中任意两个节点之间直接相连或者通过其他相互连通的节点能够达到时,则称之为连通图,否则叫非连通图。两个孤立的节点是最简单的非连通图。
图的实现并不复杂,复杂的是基于图的一些数学研究。但这不是本书的目的,所以在此不做赘述。
树
Last updated