bfs:breadth first search,廣度優先搜尋
dfs:depth first search,深度優先搜尋
如圖,a節點的下一級元素為b節點和c節點,b節點的下一級元素為d節點和e節點,c節點的下一級元素為f節點和g節點。
bfs優先遍歷當前節點下一級節點的同級元素,即若當前節點為a節點,則繼續遍歷的節點為b和c;當a的所有相鄰節點遍歷完以後,再遍歷b節點的相鄰節點d節點和e節點,以及c節點的相鄰節點f節點和g節點。至此,所有節點遍歷完成。
dfs優先遍歷當前節點下一級節點的下一級元素,即若當前節點為a節點,則繼續遍歷的節點為b節點和b節點的下一級節點d節點;d節點沒有下一級節點,此時再返回d節點的上一級b節點處,再遍歷b節點的另乙個下一級元素e節點,若沒有未遍歷過的下一級元素,則返回上一級,依此規律遍歷整個樹,完成樹的dfs。
1.bfs
bfs與樹的層序遍歷類似,使用佇列實現
演算法流程:
**:
def bfs(root):
# 使用列表作為佇列
queue =
# 將首個根節點新增到佇列中
print(root)
# 當佇列不為空時進行遍歷
while queue:
# 從佇列頭部取出乙個節點並判斷其是否有左右節點
# 若有子節點則把對應子節點新增到佇列中,且優先判斷左節點
temp = queue.pop(0)
if temp.left:
if temp.right:
print(temp.val,end=" ")
2.dfsdfs跟前序遍歷一樣,使用棧實現
演算法流程:
**:
def dfs(root):
# 使用列表作為棧
stack =
# 將首個根節點新增到棧中
# 當棧不為空時進行遍歷
while stack:
# 從棧的末尾彈出乙個節點並判斷其是否有左右節點
# 若有子節點則把對應子節點壓入棧中,且優先判斷右節點
temp = stack.pop()
if temp.right:
if temp.left:
print(temp.val,end=" ")
深度優先搜尋(DFS)和廣度優先搜尋(BFS)
先說dfs 關於dfs和bfs的搜尋題目,首先要將其轉化為樹,如迷宮,也可轉化為樹來搜尋 dfs是一條鏈一條鏈的搜尋,而bfs是逐層進行搜尋,這是他倆乙個很大的區別 給定整數a1 a2 a3 an,判斷是否可以從中選出若干個數,使得他們的和恰好為k。限制條件 樣例 4 n 1 2 4 7 a陣列 1...
深度優先搜尋 DFS 與廣度優先搜尋 BFS)
bfs和dfs演算法原理 通俗易懂版 圖的廣度優先搜尋 bfs 和深度優先搜尋 dfs 演算法解析 void dfs int step 把乙個陣列看成部分,第一部分是它的第乙個元素,第二部分是它後面的元素 求整個陣列的排列,可看成兩步 第一步求所有可能出現在第乙個位置的元素,即把第乙個元素與後面的所...
深度優先搜尋(DFS)和廣度優先搜尋(BFS)
深度優先搜尋和廣度優先搜尋都是圖形搜尋演算法,1 深度優先搜尋 是針對圖和樹的遍歷演算法,利用深度優先搜尋演算法可以產生目標圖的相應的拓撲排序表,利用拓撲排序表可以方便的解決了很多相關的圖論問題,如最大路徑問題,一般用堆資料結構來輔助實現dfs 演算法,其過程要來說是對每乙個可能的分支路徑深入到不能...