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

2021-09-29 06:31:15 字數 2110 閱讀 3269

深度優先搜尋(dfs):

廣度優先搜尋(bfs):

給定乙個二叉樹,返回其按層次遍歷的節點值(即逐層地,從左到右訪問所有節點)

例如:

給定二叉樹:[3,9,20,null,null,15,7]

3

/ \9 20

/ \

15 7

返回其層次遍歷結果:

[

[3],

[9,20],

[15,7]

]

1)dfs,遞迴

list

> result =

newarraylist

<

>()

;public list

>

levelorder

(treenode root)

private

void

helper

(treenode root,

int depth)

2)bfs,使用佇列實現

public list

>

levelorder

(treenode root)

result.

add(tmp);}

return result;

}

您需要在二叉樹的每一行中找到最大的值

示例:

輸入:

1/ \

3 2

/ \ \

5 3 9

輸出:[1, 3, 9]

題解:

public list

largestvalues

(treenode root)

result.

add(max);}

return result;

}

給定乙個由』1』(陸地)和』0』(水)組成的的二維網格,計算島嶼的數量。乙個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四個邊均被水包圍

示例 1:

輸入:

11110

11010

11000

00000

輸出: 1

示例 2:

輸入:

11000

11000

00100

00011

輸出: 3

題解:

public

intnumislands

(char

grid)}}

return num;

}private

void

dfs(

char

grid,

int i,

int j)

解析:線性掃瞄整個二維網格,如果乙個結點包含1,則以其為根結點啟動深度優先搜尋。在深度優先搜尋過程中,每個訪問過的結點被標記為0。計數啟動深度優先搜尋的根結點的數量,即為島嶼的數量

常用資料結構的時間、空間複雜度:

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

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

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

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...