 Hello 算法 1.0.0b1 Swift版二叉树的层序遍历 算法实现 广度优先遍历一般借助「队列」来实现。队列的规则是“先进先出”,广度优先遍历的规则是”一层层平推“, 两者背后的思想是一致的。 // === File: binary_tree_bfs.swift === /* 层序遍历 */ func levelOrder(root: TreeNode) -> [Int] { // 初始化队列,加入根结点 var queue: [TreeNode] Search」,简称为 BFS 和 DFS 。 9.3.1. 广度优先遍历 广度优先遍历优是一种由近及远的遍历方式,从距离最近的顶点开始访问,并一层层向外扩张。具体地,从某 个顶点出发,先遍历该顶点的所有邻接顶点,随后遍历下个顶点的所有邻接顶点,以此类推⋯⋯ 9. 图 hello‑algo.com 148 Figure 9‑9. 图的广度优先遍历 算法实现 BFS 常借助「队列」来实现。队列具有“先入先出”的性质,这与 常借助「队列」来实现。队列具有“先入先出”的性质,这与 BFS “由近及远”的思想是异曲同工的。 1. 将遍历起始顶点 startVet 加入队列,并开启循环; 2. 在循环的每轮迭代中,弹出队首顶点弹出并记录访问,并将该顶点的所有邻接顶点加入到队列尾部; 3. 循环 2. ,直到所有顶点访问完成后结束; 为了防止重复遍历顶点,我们需要借助一个哈希表 visited 来记录哪些结点已被访问。 // === File:0 码力 | 190 页 | 14.71 MB | 1 年前3 Hello 算法 1.0.0b1 Swift版二叉树的层序遍历 算法实现 广度优先遍历一般借助「队列」来实现。队列的规则是“先进先出”,广度优先遍历的规则是”一层层平推“, 两者背后的思想是一致的。 // === File: binary_tree_bfs.swift === /* 层序遍历 */ func levelOrder(root: TreeNode) -> [Int] { // 初始化队列,加入根结点 var queue: [TreeNode] Search」,简称为 BFS 和 DFS 。 9.3.1. 广度优先遍历 广度优先遍历优是一种由近及远的遍历方式,从距离最近的顶点开始访问,并一层层向外扩张。具体地,从某 个顶点出发,先遍历该顶点的所有邻接顶点,随后遍历下个顶点的所有邻接顶点,以此类推⋯⋯ 9. 图 hello‑algo.com 148 Figure 9‑9. 图的广度优先遍历 算法实现 BFS 常借助「队列」来实现。队列具有“先入先出”的性质,这与 常借助「队列」来实现。队列具有“先入先出”的性质,这与 BFS “由近及远”的思想是异曲同工的。 1. 将遍历起始顶点 startVet 加入队列,并开启循环; 2. 在循环的每轮迭代中,弹出队首顶点弹出并记录访问,并将该顶点的所有邻接顶点加入到队列尾部; 3. 循环 2. ,直到所有顶点访问完成后结束; 为了防止重复遍历顶点,我们需要借助一个哈希表 visited 来记录哪些结点已被访问。 // === File:0 码力 | 190 页 | 14.71 MB | 1 年前3
 Hello 算法 1.0.0b2 Swift版二叉树的层序遍历 算法实现 广度优先遍历一般借助「队列」来实现。队列的规则是“先进先出”,广度优先遍历的规则是”一层层平推“, 两者背后的思想是一致的。 // === File: binary_tree_bfs.swift === /* 层序遍历 */ func levelOrder(root: TreeNode) -> [Int] { // 初始化队列,加入根结点 var queue: [TreeNode] Search」,简称为 BFS 和 DFS 。 9.3.1. 广度优先遍历 广度优先遍历优是一种由近及远的遍历方式,从距离最近的顶点开始访问,并一层层向外扩张。具体地,从某 个顶点出发,先遍历该顶点的所有邻接顶点,随后遍历下个顶点的所有邻接顶点,以此类推⋯⋯ 9. 图 hello‑algo.com 148 Figure 9‑9. 图的广度优先遍历 算法实现 BFS 常借助「队列」来实现。队列具有“先入先出”的性质,这与 常借助「队列」来实现。队列具有“先入先出”的性质,这与 BFS “由近及远”的思想是异曲同工的。 1. 将遍历起始顶点 startVet 加入队列,并开启循环; 2. 在循环的每轮迭代中,弹出队首顶点弹出并记录访问,并将该顶点的所有邻接顶点加入到队列尾部; 3. 循环 2. ,直到所有顶点访问完成后结束; 为了防止重复遍历顶点,我们需要借助一个哈希表 visited 来记录哪些结点已被访问。 // === File:0 码力 | 199 页 | 15.72 MB | 1 年前3 Hello 算法 1.0.0b2 Swift版二叉树的层序遍历 算法实现 广度优先遍历一般借助「队列」来实现。队列的规则是“先进先出”,广度优先遍历的规则是”一层层平推“, 两者背后的思想是一致的。 // === File: binary_tree_bfs.swift === /* 层序遍历 */ func levelOrder(root: TreeNode) -> [Int] { // 初始化队列,加入根结点 var queue: [TreeNode] Search」,简称为 BFS 和 DFS 。 9.3.1. 广度优先遍历 广度优先遍历优是一种由近及远的遍历方式,从距离最近的顶点开始访问,并一层层向外扩张。具体地,从某 个顶点出发,先遍历该顶点的所有邻接顶点,随后遍历下个顶点的所有邻接顶点,以此类推⋯⋯ 9. 图 hello‑algo.com 148 Figure 9‑9. 图的广度优先遍历 算法实现 BFS 常借助「队列」来实现。队列具有“先入先出”的性质,这与 常借助「队列」来实现。队列具有“先入先出”的性质,这与 BFS “由近及远”的思想是异曲同工的。 1. 将遍历起始顶点 startVet 加入队列,并开启循环; 2. 在循环的每轮迭代中,弹出队首顶点弹出并记录访问,并将该顶点的所有邻接顶点加入到队列尾部; 3. 循环 2. ,直到所有顶点访问完成后结束; 为了防止重复遍历顶点,我们需要借助一个哈希表 visited 来记录哪些结点已被访问。 // === File:0 码力 | 199 页 | 15.72 MB | 1 年前3
 Hello 算法 1.0.0b5 Swift版代码实现 广度优先遍历通常借助“队列”来实现。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进” 的规则,两者背后的思想是一致的。 // === File: binary_tree_bfs.swift === /* 层序遍历 */ func levelOrder(root: TreeNode) -> [Int] { // 初始化队列,加入根节点 var queue: [TreeNode] search」,简称 BFS 和 DFS 。 9.3.1 广度优先遍历 广度优先遍历是一种由近及远的遍历方式,从某个节点出发,始终优先访问距离最近的顶点,并一层层向外 扩张。如图 9‑9 所示,从左上角顶点出发,先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻接 顶点,以此类推,直至所有顶点访问完毕。 图 9‑9 图的广度优先遍历 1. 算法实现 BFS 通常借助队列来实现。队列具有“先入先出”的性质,这与 通常借助队列来实现。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想异曲同工。 1. 将遍历起始顶点 startVet 加入队列,并开启循环。 2. 在循环的每轮迭代中,弹出队首顶点并记录访问,然后将该顶点的所有邻接顶点加入到队列尾部。 3. 循环步骤 2. ,直到所有顶点被访问完成后结束。 为了防止重复遍历顶点,我们需要借助一个哈希表 visited 来记录哪些节点已被访问。 第 9 章 图 hello‑algo0 码力 | 376 页 | 30.70 MB | 1 年前3 Hello 算法 1.0.0b5 Swift版代码实现 广度优先遍历通常借助“队列”来实现。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进” 的规则,两者背后的思想是一致的。 // === File: binary_tree_bfs.swift === /* 层序遍历 */ func levelOrder(root: TreeNode) -> [Int] { // 初始化队列,加入根节点 var queue: [TreeNode] search」,简称 BFS 和 DFS 。 9.3.1 广度优先遍历 广度优先遍历是一种由近及远的遍历方式,从某个节点出发,始终优先访问距离最近的顶点,并一层层向外 扩张。如图 9‑9 所示,从左上角顶点出发,先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻接 顶点,以此类推,直至所有顶点访问完毕。 图 9‑9 图的广度优先遍历 1. 算法实现 BFS 通常借助队列来实现。队列具有“先入先出”的性质,这与 通常借助队列来实现。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想异曲同工。 1. 将遍历起始顶点 startVet 加入队列,并开启循环。 2. 在循环的每轮迭代中,弹出队首顶点并记录访问,然后将该顶点的所有邻接顶点加入到队列尾部。 3. 循环步骤 2. ,直到所有顶点被访问完成后结束。 为了防止重复遍历顶点,我们需要借助一个哈希表 visited 来记录哪些节点已被访问。 第 9 章 图 hello‑algo0 码力 | 376 页 | 30.70 MB | 1 年前3
 Hello 算法 1.1.0 Swift版adth‑first search, BFS), 它体现了一种“一圈一圈向外扩展”的逐层遍历方式。 图 7‑9 二叉树的层序遍历 1. 代码实现 广度优先遍历通常借助“队列”来实现。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进” 的规则,两者背后的思想是一致的。实现代码如下: // === File: binary_tree_bfs.swift === /* 层序遍历 */ 所示,从左上角顶点出发,首先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻 接顶点,以此类推,直至所有顶点访问完毕。 图 9‑9 图的广度优先遍历 1. 算法实现 BFS 通常借助队列来实现,代码如下所示。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想 异曲同工。 1. 将遍历起始顶点 startVet 加入队列,并开启循环。 2. 在循环的每轮迭代中,弹出队首顶点并记录访问,然后将该顶点的所有邻接顶点加入到队列尾部。 199 3. 循环步骤 2. ,直到所有顶点被访问完毕后结束。 为了防止重复遍历顶点,我们需要借助一个哈希表 visited 来记录哪些节点已被访问。 // === File: graph_bfs.swift === /* 广度优先遍历 */ // 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点 func graphBFS(graph: GraphAdjList, startVet:0 码力 | 379 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 Swift版adth‑first search, BFS), 它体现了一种“一圈一圈向外扩展”的逐层遍历方式。 图 7‑9 二叉树的层序遍历 1. 代码实现 广度优先遍历通常借助“队列”来实现。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进” 的规则,两者背后的思想是一致的。实现代码如下: // === File: binary_tree_bfs.swift === /* 层序遍历 */ 所示,从左上角顶点出发,首先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻 接顶点,以此类推,直至所有顶点访问完毕。 图 9‑9 图的广度优先遍历 1. 算法实现 BFS 通常借助队列来实现,代码如下所示。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想 异曲同工。 1. 将遍历起始顶点 startVet 加入队列,并开启循环。 2. 在循环的每轮迭代中,弹出队首顶点并记录访问,然后将该顶点的所有邻接顶点加入到队列尾部。 199 3. 循环步骤 2. ,直到所有顶点被访问完毕后结束。 为了防止重复遍历顶点,我们需要借助一个哈希表 visited 来记录哪些节点已被访问。 // === File: graph_bfs.swift === /* 广度优先遍历 */ // 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点 func graphBFS(graph: GraphAdjList, startVet:0 码力 | 379 页 | 18.47 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Swift 版adth‑first search, BFS), 它体现了一种“一圈一圈向外扩展”的逐层遍历方式。 图 7‑9 二叉树的层序遍历 1. 代码实现 广度优先遍历通常借助“队列”来实现。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进” 的规则,两者背后的思想是一致的。实现代码如下: // === File: binary_tree_bfs.swift === /* 层序遍历 */ 所示,从左上角顶点出发,首先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻 接顶点,以此类推,直至所有顶点访问完毕。 图 9‑9 图的广度优先遍历 1. 算法实现 BFS 通常借助队列来实现,代码如下所示。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想 异曲同工。 1. 将遍历起始顶点 startVet 加入队列,并开启循环。 2. 在循环的每轮迭代中,弹出队首顶点并记录访问,然后将该顶点的所有邻接顶点加入到队列尾部。 key 而不存储 value 的哈希表,它可以在 ?(1) 时间复杂度下进行 key 的增删查改操作。根据 key 的唯一性,哈希集合通常用于数据去重等场景。 // === File: graph_bfs.swift === /* 广度优先遍历 */ // 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点 func graphBFS(graph: GraphAdjList, startVet:0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Swift 版adth‑first search, BFS), 它体现了一种“一圈一圈向外扩展”的逐层遍历方式。 图 7‑9 二叉树的层序遍历 1. 代码实现 广度优先遍历通常借助“队列”来实现。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进” 的规则,两者背后的思想是一致的。实现代码如下: // === File: binary_tree_bfs.swift === /* 层序遍历 */ 所示,从左上角顶点出发,首先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻 接顶点,以此类推,直至所有顶点访问完毕。 图 9‑9 图的广度优先遍历 1. 算法实现 BFS 通常借助队列来实现,代码如下所示。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想 异曲同工。 1. 将遍历起始顶点 startVet 加入队列,并开启循环。 2. 在循环的每轮迭代中,弹出队首顶点并记录访问,然后将该顶点的所有邻接顶点加入到队列尾部。 key 而不存储 value 的哈希表,它可以在 ?(1) 时间复杂度下进行 key 的增删查改操作。根据 key 的唯一性,哈希集合通常用于数据去重等场景。 // === File: graph_bfs.swift === /* 广度优先遍历 */ // 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点 func graphBFS(graph: GraphAdjList, startVet:0 码力 | 379 页 | 18.48 MB | 10 月前3
 Hello 算法 1.0.0 Swift版breadth‑first search, BFS」,它体现了一种“一圈一圈向外扩展”的逐层遍历方式。 图 7‑9 二叉树的层序遍历 1. 代码实现 广度优先遍历通常借助“队列”来实现。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进” 的规则,两者背后的思想是一致的。实现代码如下: // === File: binary_tree_bfs.swift === /* 层序遍历 */ 所示,从左上角顶点出发,首先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻 接顶点,以此类推,直至所有顶点访问完毕。 图 9‑9 图的广度优先遍历 1. 算法实现 BFS 通常借助队列来实现,代码如下所示。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想 异曲同工。 1. 将遍历起始顶点 startVet 加入队列,并开启循环。 2. 在循环的每轮迭代中,弹出队首顶点并记录访问,然后将该顶点的所有邻接顶点加入到队列尾部。 尾部。 3. 循环步骤 2. ,直到所有顶点被访问完毕后结束。 为了防止重复遍历顶点,我们需要借助一个哈希表 visited 来记录哪些节点已被访问。 // === File: graph_bfs.swift === /* 广度优先遍历 */ // 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点 func graphBFS(graph: GraphAdjList, startVet:0 码力 | 378 页 | 17.59 MB | 1 年前3 Hello 算法 1.0.0 Swift版breadth‑first search, BFS」,它体现了一种“一圈一圈向外扩展”的逐层遍历方式。 图 7‑9 二叉树的层序遍历 1. 代码实现 广度优先遍历通常借助“队列”来实现。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进” 的规则,两者背后的思想是一致的。实现代码如下: // === File: binary_tree_bfs.swift === /* 层序遍历 */ 所示,从左上角顶点出发,首先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻 接顶点,以此类推,直至所有顶点访问完毕。 图 9‑9 图的广度优先遍历 1. 算法实现 BFS 通常借助队列来实现,代码如下所示。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想 异曲同工。 1. 将遍历起始顶点 startVet 加入队列,并开启循环。 2. 在循环的每轮迭代中,弹出队首顶点并记录访问,然后将该顶点的所有邻接顶点加入到队列尾部。 尾部。 3. 循环步骤 2. ,直到所有顶点被访问完毕后结束。 为了防止重复遍历顶点,我们需要借助一个哈希表 visited 来记录哪些节点已被访问。 // === File: graph_bfs.swift === /* 广度优先遍历 */ // 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点 func graphBFS(graph: GraphAdjList, startVet:0 码力 | 378 页 | 17.59 MB | 1 年前3
 Hello 算法 1.2.0 繁体中文 Swift 版dth‑first search, BFS), 它體現了一種“一圈一圈向外擴展”的逐層走訪方式。 圖 7‑9 二元樹的層序走訪 1. 程式碼實現 廣度優先走訪通常藉助“佇列”來實現。佇列遵循“先進先出”的規則,而廣度優先走訪則遵循“逐層推進” 的規則,兩者背後的思想是一致的。實現程式碼如下: // === File: binary_tree_bfs.swift === /* 層序走訪 接頂點,以此類推,直至所有頂點訪問完畢。 第 9 章 圖 www.hello‑algo.com 199 圖 9‑9 圖的廣度優先走訪 1. 演算法實現 BFS 通常藉助佇列來實現,程式碼如下所示。佇列具有“先入先出”的性質,這與 BFS 的“由近及遠”的思 想異曲同工。 1. 將走訪起始頂點 startVet 加入列列,並開啟迴圈。 2. 在迴圈的每輪迭代中,彈出佇列首頂點並記錄訪問, key 而不儲存 value 的雜湊表,它可以在 ?(1) 時間複雜度下進行 key 的增刪查改操作。根據 key 的唯一性,雜湊集合通常用於資料去重等場景。 // === File: graph_bfs.swift === /* 廣度優先走訪 */ // 使用鄰接表來表示圖,以便獲取指定頂點的所有鄰接頂點 func graphBFS(graph: GraphAdjList, startVet:0 码力 | 379 页 | 18.79 MB | 10 月前3 Hello 算法 1.2.0 繁体中文 Swift 版dth‑first search, BFS), 它體現了一種“一圈一圈向外擴展”的逐層走訪方式。 圖 7‑9 二元樹的層序走訪 1. 程式碼實現 廣度優先走訪通常藉助“佇列”來實現。佇列遵循“先進先出”的規則,而廣度優先走訪則遵循“逐層推進” 的規則,兩者背後的思想是一致的。實現程式碼如下: // === File: binary_tree_bfs.swift === /* 層序走訪 接頂點,以此類推,直至所有頂點訪問完畢。 第 9 章 圖 www.hello‑algo.com 199 圖 9‑9 圖的廣度優先走訪 1. 演算法實現 BFS 通常藉助佇列來實現,程式碼如下所示。佇列具有“先入先出”的性質,這與 BFS 的“由近及遠”的思 想異曲同工。 1. 將走訪起始頂點 startVet 加入列列,並開啟迴圈。 2. 在迴圈的每輪迭代中,彈出佇列首頂點並記錄訪問, key 而不儲存 value 的雜湊表,它可以在 ?(1) 時間複雜度下進行 key 的增刪查改操作。根據 key 的唯一性,雜湊集合通常用於資料去重等場景。 // === File: graph_bfs.swift === /* 廣度優先走訪 */ // 使用鄰接表來表示圖,以便獲取指定頂點的所有鄰接頂點 func graphBFS(graph: GraphAdjList, startVet:0 码力 | 379 页 | 18.79 MB | 10 月前3
共 7 条
- 1













