数据结构-08-集合(Set)-哈希表(Hash)-图(Map)

被刻印的时光 ゝ 提交于 2020-01-09 23:27:09
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ##Set Set 是一种用于保存 不重复元素 的数据结构。常被用作测试归属性,故其查找的性能十分重要。 Set 是python自带的基本数据结构, 有多种初始化方式。 Python的set跟dict的Implementation方式类似, 可以认为set是只有key的dict. s = set() s1 = {1, 2, 3} s.add('shaunwei') 'shaun' in s # return true s.remove('shaunwei') ##Map - 哈希表 Map 是一种 关联数组 的数据结构,也常被称为字典或键值对。 在 Python 中 dict(Map) 是一种基本的数据结构。 # map 在 python 中是一个keyword hash_map = {} # or dict() hash_map['shaun'] = 98 hash_map['wei'] = 99 exist = 'wei' in hash_map # check existence point = hash_map['shaun'] # get value by key point = hash_map.pop('shaun') # remove by key, return value keys =

图的遍历——广度优先搜索(Breadth First Search)

一曲冷凌霜 提交于 2020-01-09 23:14:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1.广度优先搜索遍历类似于树的按层次遍历的过程。 假设从图中某顶点V出发,在访问了V之后依次访问V的各个未曾访问过得邻接点,然后分别从这些邻接点出出发,依次访问他们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问。直至图中所有的已被访问的顶点的邻接点都被访问完。若此时图中还有未被访问的顶点,则选一个图中未被访问的顶点做起始点,重复上述广度优先搜索遍历过程,直到所有的顶点被遍历完。 换句话说,广度优先搜索是以v为起始点,由近及远,依次访问和v路径相通且路径长度为1,2,。。。的顶点。 2.以下图为例,做个简单的广度优先搜索的过程 假设以V1顶点为出发点,首先访问V1顶点,然后依次访问V1的邻接点V2,V3,然后以V1的邻接点V2,V3为起始点,分别访问V2的邻接点V4,V5,然后访问V3的邻接点V6,V7;紧接着分别以V4,V5,V6,V7为出发点,首先访问V4的邻接点V8,访问V5的邻接点,V6的邻接点V9,v7的邻接点,此时V8,V9的邻接点都已经被访问完了,此时图的遍历已经结束。 此时的顶点访问顺序为: V1->V2->V3->V4->V5->V6->V7->V8->V9 3.和深度优先搜索类似,在遍历的过程中也需要一个访问标志数组。并且,为了顺次访问路径长度为2,3的顶点

BFS实现从上往下打印二叉树

牧云@^-^@ 提交于 2020-01-07 13:56:52
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印 深度优先搜索算法(Breadth-First-Search) 深度优先算法是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。如果所有节点均被访问,则算法中止。一般用队列数据结构来辅助实现BFS算法。 算法步骤 1. 首先将根节点放入队列中。 2. 从队列中取出第一个节点,并检验它是否为目标。 如果找到目标,则结束搜寻并回传结果。 否则将它所有尚未检验过的直接子节点加入队列中。 3. 若队列为空,表示整张图都检查过了——亦即图中没有欲搜寻的目标。结束搜寻并回传“找不到目标”。 4. 重复步骤2 代码实现 public ArrayList<Integer> printFromTopToBottom(TreeNode root) { if (root == null) return new ArrayList<Integer>(); ArrayList<Integer> list = new ArrayList<Integer>(); ArrayDeque<TreeNode> queue = new ArrayDeque<TreeNode>(); // 首先将根节点放入队列中 queue.offer(root);