BFS和DFS優先搜索算法

1. BFS與DFS

1.1 BFS

DFS即Depth First Search,深度優先搜索。它是一種圖遍歷算法,它從一個起始點開始,逐層擴展搜索范圍,直到找到目標節點為止。

這種算法通常用于解決“最短路徑”問題,比如在迷宮中找到從起點到終點的最短路徑

  • 首先,從起點開始,檢查所有與它相鄰的位置,也就是距離起點為1的位置
  • 然后,繼續向外擴展,檢查所有距離起點為2的位置,以此類推,直到找到出口
    在這里插入圖片描述

我們發現每次搜索的位置都是距離當前節點最近的點。因此,BFS是具有最短路的性質的。在BFS中,可以使用隊列來存儲待搜索的節點。起始點首先加入隊列中,然后不斷從隊列中取出節點,檢查它是否是目標節點。如果不是,就將它的所有未被訪問過的鄰居加入隊列中。這樣,隊列中的節點總是按照它們距離起點的距離排序,先加入隊列的節點總是先被取出來搜索

通過這種方式,BFS可以找到起點到目標節點的最短路徑。在實際應用中,BFS還可以用于拓撲排序、連通性檢測等問題的解決。

1.2 DFS

DFSDepth First Search,深度優先搜索。它從一個起始點開始,一直往下走直到不能再走為止(簡單理解:一條路走到黑),然后返回到前一個節點繼續探索它的其他分支,直到找到目標節點為止。這種算法通常用于解決“遍歷”問題,比如在樹中查找所有的葉子節點

要理解DFS,也還可以想象自己在迷宮中尋找所有可行的路徑

  • 首先,你會從起點開始,順著一條路一直走,直到你走到一個死胡同
  • 再返回到前一個節點,繼續探索其他分支

在DFS中,你可以使用遞歸或棧來實現深度優先搜索。通過這種方式,DFS可以找到所有可行的路徑,或者在樹中查找所有的葉子節點。

在實際應用中,DFS還可以用于拓撲排序、連通性檢測等問題的解決。與BFS相比,DFS通常更適合處理深度優先的問題,而BFS更適合處理廣度優先的問題

1.3 BFS與DFS的比較

如果分別用DFS 與 BFS 將二叉樹的所有結點遍歷一遍,那么它們遍歷結點的順序分別如下所示


接下來,讓我們先看看在二叉樹上進行 BFS 遍歷和 DFS 遍歷的代碼比較

(1)DFS 使用遞歸遍歷

void dfs(TreeNode* root) 
{if (root == nullptr) {return;}// 依次遞歸遍歷它的左子樹和右子樹dfs(root->left);dfs(root->right);
}

(2)BFS 遍歷使用隊列相關的數據結構

void bfs(TreeNode* root) 
{// 創建一個隊列queue<TreeNode*> q;q.push(root);while (!q.empty()) {// 在每次循環中,使用 q.front() 獲取隊頭節點,并將其出隊TreeNode* node = q.front();q.pop();// 然后將下一層的節點加入隊列中// 檢查這個節點的左右子節點是否為空,如果不為空,就將它們加入隊列中if (node->left != nullptr) {q.push(node->left);}if (node->right != nullptr){q.push(node->right);}}
}

參考博客: https://blog.csdn.net/v_JULY_v/article/details/6111353

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12682.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12682.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12682.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鐵路機輛作業移動智能終端的特點是什么?

在鐵路機輛作業的現代化進程中&#xff0c;移動智能終端以其獨特的優勢成為了不可或缺的裝備。這些終端以其高度的便攜性&#xff0c;使得工作人員能夠隨時隨地處理各種作業任務&#xff0c;極大地提升了工作效率。它們具備出色的抗干擾性和高防護性&#xff0c;能夠在復雜多變…

算法學習系列(六十一):樹形DP

目錄 引言一、沒有上司的舞會二、樹的重心三、樹的最長路徑四、樹的中心 引言 關于這個樹形 D P DP DP 代碼其實都是那一套&#xff0c;核心還是在于思維上的難度&#xff0c;關鍵是這個思路你能不能想明白&#xff0c;想明白了就非常的簡單&#xff0c;因為代碼幾乎長得都差…

LLM應用-prompt提示:讓大模型總結生成思維導圖

第一步&#xff1a;大模型生成markdown思維導圖格式 例如&#xff1a;kimi 總結pdf文檔案例&#xff1a; 生成的markdown格式&#xff1a; # 知識圖譜的構建及應用 ## 一、知識圖譜的構建 ### 1. 數據采集 - 來源&#xff1a;結構化數據庫、半結構化網頁、非結構化文本 - 預處…

React useState 的調用規則與最佳實踐:為何不在條件語句內使用 useState

在React中&#xff0c;useState 的調用確實有一些特定的規則和最佳實踐 以下是為什么通常不推薦在 if 語句內調用 useState 的原因&#xff1a; 1、Hooks 規則&#xff1a; React Hooks 的規則之一是&#xff0c;你應該在函數組件的頂層調用它們&#xff0c;而不是在循環、條…

技術管理者如何建立權威?

很多技術管理者經常抱怨管理不好做&#xff0c;還是做技術容易&#xff0c;完全受自己控制。員工一點都不聽自己的&#xff0c;安排的工作拖拖拉拉&#xff0c;一點執行力都沒有。 不是管理難做&#xff0c;而是管理者沒有建立權威。如何建立權威&#xff0c;參考以下四點。 …

PCIE V3.0物理層協議學習筆記

一、說明 PCI-Express(peripheral component interconnect express)是一種高速串行計算機擴展總線標準&#xff0c;它原來的名稱為“3GIO”&#xff0c;是由英特爾在2001年提出的&#xff0c;旨在替代舊的PCI&#xff0c;PCI-X和AGP總線標準。 PCIe屬于高速串行點對點雙通道高…

8.11 矢量圖層線要素單一符號使用二

文章目錄 前言箭頭&#xff08;Arrow&#xff09;QGis設置線符號為箭頭(Arrow)二次開發代碼實現 總結 前言 本章介紹矢量圖層線要素單一符號中箭頭&#xff08;Arrow&#xff09;的使用說明&#xff1a;文章中的示例代碼均來自開源項目qgis_cpp_api_apps 箭頭&#xff08;Arr…

證照之星是什么軟件 證照之星哪個版本好用?證照之星支持哪些相機 證照之星XE免費版

許多人都需要使用證件照&#xff0c;為了滿足這一需求&#xff0c;人們會使用照相機、手機、電腦等工具進行拍攝。除此之外&#xff0c;市面上還存在專門的證件照拍攝軟件&#xff0c;比如證照之星。那么&#xff0c;各位小伙伴是否了解證照之星哪個版本好用&#xff0c;證照之…

如何利用3D可視化大屏提升信息展示效果?

老子云3D可視化平臺https://www.laozicloud.com/ 引言 在信息爆炸的時代&#xff0c;如何有效地傳達和展示信息成為了各行各業的一大挑戰。傳統的平面展示方式已經無法滿足人們對信息展示的需求&#xff0c;3D可視化大屏應運而生&#xff0c;成為了提升信息展示效果的利器。本…

會員管理系統應該具備哪些功能?

?會員管理系統應該具備一系列核心功能&#xff0c;以滿足企業在會員管理、營銷和客戶服務等方面的需求。 以下是一些關鍵的會員管理系統功能&#xff1a; 1、會員信息管理&#xff1a;這是會員管理系統的基本功能&#xff0c;包括會員注冊、信息錄入、修改和查詢等。系統應支…

URL入參出參請求頭可配置化

整體思路 通過spring的Spell表達式解析變量的參數值&#xff0c;參數名定義為${XXX},在解析參數值后&#xff0c;將${XXX}替換成#XXX以匹配Spell表達式。 核心實現類 package com.example.spring_boot_study.spring.spell;import cn.hutool.core.map.MapUtil; import cn.hut…

大模型相關內容的研究學習

大模型研究學習 1.大模型的“幻覺” 幻覺可以分為事實性幻覺和忠實性幻覺。 事實性幻覺&#xff0c;是指模型生成的內容與可驗證的現實世界事實不一致。 比如問模型“第一個在月球上行走的人是誰&#xff1f;”&#xff0c;模型回復“Charles Lindbergh在1951年月球先驅任務…

the7主題下載,探索WordPress主題的無限可能

在數字時代&#xff0c;一個出色的網站是任何企業或個人品牌的必備。但在這個競爭激烈的網絡世界中&#xff0c;如何讓您的網站脫穎而出&#xff1f;答案就是 the7 —— 一款專為創造獨特和視覺沖擊力強的網站而設計的 WordPress 主題。 1. 無限設計可能性 the7 以其獨特的設…

探索政務熱線24小時在線服務:提升政府服務效能與民眾滿意度

一. 引言 在信息化、網絡化日益深入的今天&#xff0c;政府服務的方式也在不斷地變革與創新。政務熱線系統作為政府與民眾溝通的重要橋梁&#xff0c;其重要性不言而喻。政務熱線不僅是政府傾聽民眾聲音、回應社會關切的重要渠道&#xff0c;更是推動政府服務向數字化、智能化…

代碼隨想錄Day40:Leetcode343、96

Leetcode343&#xff1a; 問題描述&#xff1a; 給定一個正整數 n &#xff0c;將其拆分為 k 個 正整數 的和&#xff08; k > 2 &#xff09;&#xff0c;并使這些整數的乘積最大化。 返回 你可以獲得的最大乘積 。 代碼及注釋解析&#xff1a; class Solution { publ…

Linux-CentOS-7忘記密碼-修改登錄密碼圖文詳解

Linux-CentOS-7忘記密碼-修改登錄密碼圖文詳解 1.重啟系統&#xff1a; 在登錄界面&#xff0c;選擇要登錄的用戶并點擊"Power"按鈕&#xff0c;然后選擇"Restart"或"Reboot"重新啟動系統。 在系統啟動時持續按下 “e” 鍵進入編輯模式。 2…

谷歌 I/O 2024大會全面硬鋼OpenAI;騰訊宣布旗下的混元文生圖大模型;阿里巴巴技術下的AI自動視頻剪輯工具

? 1: 谷歌 I/O 2024 谷歌 I/O 2024 發布了眾多新技術&#xff0c;包括 Gemini AI、大語言模型和通用 AI 智能體等&#xff0c;全面顛覆搜索體驗。 谷歌 I/O 2024發布會帶來許多令人興奮的新功能和技術創新&#xff1a; Gemini 1.5 Pro&#xff1a;一個極其強大的語言模型&am…

文獻檢索神器分享:一鍵篩選頂刊論文,還能免費下載全文!

我是娜姐 迪娜學姐 &#xff0c;一個SCI醫學期刊編輯&#xff0c;探索用AI工具提效論文寫作和發表。 信息爆炸的時代&#xff0c;文獻是根本讀不完。一個關鍵詞能搜出來幾萬篇&#xff0c;而且有些結論還是完全相反的&#xff0c;到底該讀哪些&#xff1f; 第一步的文獻篩選很重…

Java面試八股之float和double的區別

Java中float和double的區別 存儲空間與精度&#xff1a; double&#xff1a;占據64位&#xff08;8字節&#xff09;存儲空間&#xff0c;屬于雙精度浮點數。它可以提供較高的精度&#xff0c;通常能夠精確表示大約15到17位十進制數字&#xff0c;適合用于需要較高精度計算或…