数据结构树和图之间有什么区别?


139

从学术上来讲,数据结构树和图之间的本质区别是什么?基于树的搜索和基于图的搜索又如何呢?

Answers:


150

树只是图的一种受限形式。

树具有方向(父/子关系),并且不包含循环。它们适合有向无环图(或DAG)类别。因此,树是DAG,其限制是一个孩子只能有一个父母。

需要指出的一件事很重要,树不是递归数据结构。由于上述限制,它们不能实现为递归数据结构。但是,也可以使用通常不是递归的任何DAG实现。我首选的Tree实现是集中式地图表示,并且是非递归的。

通常首先搜索图形的广度或深度。树也是如此。


8
图非常有用,可用于建模大量事物。许多其他数据结构可以看作是有限制的图形。例如,单链列表是DAG的特例。
加西亚

7
@ user785287 集中地图表示是什么意思?
极客

36
“树不是递归数据结构”是误导和错误的。可以用非递归的数据结构来表示树(例如,边的数组;像二进制堆下面的树一样,可以在数组中非常紧凑地表示完整的树;还有其他简洁的表示等),但是表示它们的最流行和最有用的方法是使用基于递归指针的结构。对于无根的树,这种表示方法不是唯一的,但这并不重要。
j_random_hacker 2014年

2
不完全的。树不一定有方向。en.wikipedia.org/wiki/Tree_(graph_theory) 显示了没有方向的树的示例。这些通常用于生物学环境。
Michal Palczewski,2015年

2
@ harshpatel991树的指向不是这样的:“ X和Y处于父子关系”没有方向。但是,“ X是Y的子代”和“ Y是X的子代”的个人关系是有向关系。方向只表明这一点;“运动”的方向。在树木中,除非真正有意义,否则不需要方向性的想法(这在树木中最为常见)。至少我是这样看的。
Kostas Mouratidis

105

除了解释之外,我更喜欢在图片中显示它。

实时树

实时树

现实生活中的图形

实时图

是的,地图可以可视化为图形数据结构。

看到他们像这样使生活更轻松。在我们知道每个节点只有一个父节点的地方使用树。但是图可以有多个前任(图通常不使用术语父级)。

在现实世界中,您几乎可以使用图形表示任何东西。例如,我使用了地图。如果您将每个城市都视为一个节点,则可以从多个点到达它。指向该节点的点称为前任点,并将指向该节点的点称为后继点。

电路图,房屋平面图,计算机网络或河流系统是图表的更多示例。可以将许多现实世界中的示例视为图形。

技术图可能像这样

树:

在此处输入图片说明

图表:

在此处输入图片说明

确保参考以下链接。这些将回答您关于树和图的几乎所有问题。

参考文献:

  1. http://www.introprogramming.info/english-intro-csharp-book/read-online/chapter-17-trees-and-graphs/#_Toc362296541

  2. http://www.community-of-knowledge.de/beitrag/data-trees-as-a-means-of-presenting-complex-data-analysis/

  3. 维基百科


7

其他答案很有用,但是它们缺少每个属性:

图形

无向图,图像来源:Wikipedia

有向图,图像来源:维基百科

  • 由一组顶点(或节点)和一组连接部分或全部顶点的边组成
  • 任何边都可以连接尚未由相同边连接的任何两个顶点(对于有向图,沿相同方向)
  • 不必连接(边缘不必将所有顶点连接在一起):单个图形可以由几组断开连接的顶点组成

  • 根据Wikipedia,可以是有向的或无向的(这将适用于图形中的所有边):

    例如,如果顶点表示一个聚会上的人,并且两个人握手时在边缘之间存在一条边,则此图是无向的,因为只有当B也与A握手时,任何人A才能与B握手。相反,如果从人A到人B的任何一条边都对应于赞美B的A,则该图是有方向的,因为赞美不一定是往复的。

图片来源:Wikipedia

  • 一种图
  • 顶点通常称为“节点”
  • 边是有向的,表示“是”的子项(或“是”的父项)关系
  • 每个节点(根节点除外)仅具有一个父节点(以及零个或多个子节点)
  • 仅有一个“根”节点(如果树上至少有一个节点),该节点是没有父节点的节点
  • 必须连接
  • 是非循环的,表示它没有循环:“循环是边和顶点的路径[AKA序列],其中顶点可从其自身到达”

以上属性有些重叠。具体来说,其余两个属性暗含了最后两个属性。但是,所有这些都值得一提。


3

在树中,每个节点(根节点除外)恰好有一个前任节点和一个或两个后继节点。可以使用有序,前序,后序和广度优先遍历进行遍历。树是一种无周期的特殊图形,因此称为DAG(有向无环图)。树是一个层次模型。

在图中,每个节点具有一个或多个前任节点和后继节点。通过使用深度优先搜索(DFS)和广度优先搜索(BFS)算法遍历该图。图具有循环,因此它比树更复杂。图是一种网络模型。图有两种:有向图和无向图。


2

树很明显:它们是由带有子节点的递归数据结构。

映射(又名字典)是键/值对。给地图一个键,它将返回相关的值。

可以使用树来实现地图,希望您不要感到困惑。

更新:将“图形”与“地图”混淆是非常混乱的。

图比树更复杂。树意味着递归的父/子关系。有自然的遍历树的方法:深度优先,宽度优先,级别顺序等。

图在节点之间可以具有单向或双向路径,可以是循环的也可以是非循环的,等等。我认为图更加复杂。

我认为,在任何体面的数据结构文本(例如“算法设计手册”)中进行粗略搜索都会比任何数量的SO答案提供更多更好的信息。我建议您不要走被动路线,而是自己开始做一些研究。


1
抱歉,我的意思是图表,我输入了地图。
user918304 2011年

“将“图形”与“地图”混淆是非常混乱的。” :)
cpz 2014年

1
说“图形比树木更复杂”,就像说“乌鸦比鸟更专业”。我们不应该说“所有树都是图,但不是所有图都是树”吗?
dudewad

六年后我不在乎。当然,您可以在这里更好地利用自己的时间。
duffymo


0

在数学中,图形是一组对象的表示,其中一些对象对通过链接连接。相互连接的对象由称为顶点的数学抽象表示,而连接一些顶点对的链接称为边。[1] 通常,图形以图解形式描绘为顶点的一组点,并通过边的线或曲线相连。图形是离散数学的研究对象之一。


0

树中的一个根节点,每个孩子只有一个父节点。但是,没有根节点的概念。另一个区别是,树是层次模型,而图是网络模型。


0

一棵树是有向图,使得:

a)去除边缘方向后,它是连接的并且是非循环的

  1. 您可以删除非循环的假设
  2. 如果它是有限的,则可以替代地删除它已连接的假设

b)除顶点以外的每个顶点的度数为1

c)根的度数为0

  1. 如果只有有限多个节点,则可以删除根为indegree 0的假设或除根之外的其他节点为度1的假设。

参考:http : //www.cs.cornell.edu/courses/cs2800/2016sp/lectures/lec27-29-graphtheory.pdf


0

树基本上是不包含循环的无向图,因此可以说树是图的更受限形式。然而,树和图在实现各种算法方面有不同的应用。例如,图形可用于模型路线图,而树可用于实现任何分层数据结构。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.