樹搜尋 深度優先和廣度優先

2021-08-19 18:48:43 字數 1011 閱讀 2953

在android開發中,有時候會遇到多層級列表的顯示,如下圖,可用recyclerview實現。

其資料來源的資料結構是一種樹狀結構,如下圖:

現在有兩種方法來遍歷這種資料結構。

深度優先搜尋

其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次。

舉例說明之:據上圖,我們從a點開始發起深度優先搜尋,則可能得到如下的訪問過程:a→b→e,沒有路了,回溯到b;→f,沒有路了,回溯到b;→g,沒有路了,回溯到a;→c→h等等。

全過程:a→b→e→f→g→c→h→d→i→j

深度優先遍歷各個節點,需要使用到棧(stack)這種資料結構。棧的特點是是先進後出。**實現:

public

static

void

depthfirstsearch(listdata) }}

}}

廣度優先搜尋
其過程簡要來說是對每一層節點依次訪問,訪問完一層再進入下一層,而且每個節點只能訪問一次。

舉例說明之:據上圖,我們從a點開始發起廣度優先搜尋,則可能得到如下的訪問過程:a,訪問完第一層了,接著訪問第二層b→c→d,訪問完第二層,接著第三層e→f→g→h→i→j。

全過程:a→b→c→d→e→f→g→h→i→j

廣度優先遍歷各個節點,需要使用到佇列(queue)這種資料結構,佇列的特點是先進先出。**實現:

public

static

void

breadthfirstsearch(listdata) }}

深度優先搜尋和廣度優先搜尋

深度優先的思想是先記住當前的起點,然後選定乙個方向一條道走到黑,若失敗則回到起點再選定另外乙個方向走到黑。廣度優先的思想是記住當前的起點,然後選定各個方向的相鄰點作為新的起點,再繼續。可以看出,深度優先和廣度優先都需要記住當前的起點,不同的是深度優先每次只需要記住乙個方向的相鄰點,廣度優先則要記住所...

廣度優先搜尋和深度優先搜尋

dbf深度優先搜尋,最經典的方法,可以使用遞迴來實現。結構體定義 typedef char vertextype typedef int edgetype define maxvex 100 define infinite 65535 typedef struct mgraph 測試函式如下 mgr...

深度優先搜尋和廣度優先搜尋

定義 圖 graph 是由頂點的有窮非空集合和頂點之間邊的集合組成,通常表示為 g v,e 其中,g表示乙個圖,v是圖g中頂點的集合,e是圖g中邊的集合.簡單點的說 圖由節點和邊組成。乙個節點可能與眾多節點直接相連,這些節點被稱為鄰居。如二叉樹就為乙個簡單的圖 廣度優先搜尋演算法 breadth f...