CS61B - Lec28 - Intro to Graphs

本文深入探讨了Graph和Tree的数据结构,讲解了Tree的遍历方式:preorder、inorder、postorder,以及Graph的特性,包括Path、Cycle等概念。特别介绍了Graphs作为Tree的广义形式,以及深度优先遍历(DFS)在Graph问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


今天学习了新的结构——Graph,是更广义上的Tree(Tree∈Graph)。

Trees and Traversals

这一节讲了之前提到的Tree的遍历方式(Traversals)——preorder, inorder, postorder。具体意思就是根节点的三种遍历顺序,最先,中间以及最后。
先打根节点(preOrder):
在这里插入图片描述
先打左节点(inOrder):
在这里插入图片描述
最后打根节点(postOrder):
在这里插入图片描述
树形结构适合文件管理,如下图,递归的遍历方式可以很方便的实现各个文件夹统计文件总数的功能。
在这里插入图片描述

Graphs

前面说过了,Graphs是更广义上的Tree,Tree属于Graph的一部分。Tree必须满足两点之间有且只有一条路径,而Graph可以包含cycle,并且两点之间还可以不相连。
在这里插入图片描述
这张图可以更清楚地看到为什么称这种结构为Graph。因为这种结构更像几何图形:包含顶点、边。有时也可给顶点编号或者设置权重。
Path是一系列被边相连的顶点,simple path是不经过重复顶点的一条path。
Cycle是起始顶点和终止顶点相同的path。
如果有两个顶点中间有一条path,就说这两个顶点是相连的;如果所有的顶点相连,就说这个graph是相连的。
在这里插入图片描述
Graph有acyclic和cyclic分类方式,标准就是包不包含循环方式;还有directed和undirected,节点包不包含方向。
在这里插入图片描述

Graph Problems

在这里插入图片描述
两个比较著名的问题:

  • 有没有一条经过所有edge的cycle?
  • 有没有一条经过所有顶点的cycle?

在这里插入图片描述

Depth-First Traversal

这一节讲了深度优先的遍历方式。

首先看s-t问题,求两点是否相连,也就是看看有没有一条path经过s和t。需要遍历一下graph。
在这里插入图片描述
可以这样:
在这里插入图片描述
但是很明显,由于没有方向,所以在遍历某个节点的所有neighbour的时候,会遍历到上一个节点,造成死循环,解决方式是加一个mark,如果遍历过了就变为1,遍历到就自动跳过。
在这里插入图片描述
以上的遍历方式叫深度优先遍历(Depth First Traversal)。意思就是把某个节点的一个subgraph全遍历了,再转到下一个subgraph。因为遍历是越挖越深,不断穷尽到底(Tree更直观一点),所以称之为深度优先遍历方式。
在这里插入图片描述
上图中0-3的特殊情况,没有遍历完0的subgraph就有可能转到另一个subgraph3,不过这也算深度优先,说是毕竟还是先遍历subgraph了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值