日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

树的广度优先搜索(BFS),深度优先搜索(DFS)

發布時間:2025/3/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树的广度优先搜索(BFS),深度优先搜索(DFS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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與樹的層序遍歷類似,使用隊列實現
算法流程:

  • 將樹append到隊列中
  • while 隊列不為空
    ??????取隊列第一個元素
    ??????if該元素的左孩子不為空
    ????????????將左孩子append到隊列
    ??????if該元素的右孩子不為空
    ????????????將右孩子append到隊列
    ??????打印該元素的val
  • 代碼:

    def BFS(root): # 使用列表作為隊列queue = []# 將首個根節點添加到隊列中queue.append(root)print(root)# 當隊列不為空時進行遍歷while queue:# 從隊列頭部取出一個節點并判斷其是否有左右節點# 若有子節點則把對應子節點添加到隊列中,且優先判斷左節點temp = queue.pop(0)if temp.left:queue.append(left)if temp.right:queue.append(right)print(temp.val,end=" ")

    2.DFS
    DFS跟前序遍歷一樣,使用棧實現
    算法流程:

  • 將樹append到棧中
  • while 棧不為空
    ??????取棧最后一個元素
    ??????if該元素的右孩子不為空
    ????????????將右孩子append到棧
    ??????if該元素的左孩子不為空
    ????????????將左孩子append到棧
    ??????打印該元素的val
  • 代碼:

    def DFS(root): # 使用列表作為棧stack = []# 將首個根節點添加到棧中stack.append(root)# 當棧不為空時進行遍歷while stack:# 從棧的末尾彈出一個節點并判斷其是否有左右節點# 若有子節點則把對應子節點壓入棧中,且優先判斷右節點temp = stack.pop()if temp.right:stack.append(right)if temp.left:stack.append(left)print(temp.val,end=" ")

    總結

    以上是生活随笔為你收集整理的树的广度优先搜索(BFS),深度优先搜索(DFS)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。