廣度優先遍歷和深度優先遍歷

2022-03-28 13:56:36 字數 2129 閱讀 8190

1.1 概念

①以初始節點v0作為第一層節點,接著訪問它。

②然後迭代第一層節點即v0,訪問它相鄰接的沒有訪問過的節點比如v1,v2,v1,v2加入到第二層節點

③迭代第二層節點v1,v2,v1,v2依次訪問相鄰接的沒有訪問過的節點,重複上述步驟直至所有節點都被訪問過為止。

如圖所示首先訪問根節點v0,並將v0加入到第一層。迭代第一層節點,和vo相鄰接的沒有訪問過的節點有v1和v2,訪問v1和v2,並將v1和v2加入到第二層,迭代第二層中的節點v1和v2,和v1相鄰接的沒有訪問過的節點有v3,v4,訪問v3和v4,並加入到第三層,和v2相鄰接的沒有訪問過的節點有v5和v6,訪問v5和v6,並加入到第三層。

1.3**

public class bfsdemo 

queueq = new linkedlist<>();

q.offer(root);

int size = q.size();

treenode temp = null;

while(!q.isempty())

if(temp.right != null)

size--;}}

return;

}

2.1概念

①從給定的乙個節點v0作為起點,訪問它。

②以v0作為起點,找到乙個和它相鄰且未被訪問過節點v1,重複上述步驟。

③當到達乙個節點vi,它所有相鄰的節點都被訪問過,那麼就回退到vi-1,去找和它相鄰且未被訪問過節點。重複這一步,直到訪問過的頂點在也找不到和它相鄰且未被訪問過的節點。

②回退到v1,->v3

③回退到v0, ->v2->v5

④回退到v2, ->v6

2.3**

public class dfsdemo 

dfs(root.left);

dfs(root.right);

return;}}

給定乙個二叉樹,找出其最大深度。

二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。

說明: 葉子節點是指沒有子節點的節點。

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

返回它的最大深度 3 。

3.1分析

可以採用廣度優先遍歷,第一層深度為1,每增加一層深度加一

也可以採用深度優先遍歷,訪問每個節點時判斷它和最大深度之間的大小。或者計算左子樹深度和右子樹的深度,取他們之間的最大值然後加1。

public class bfsdemo 

queueq = new linkedlist<>();

q.offer(root);

int size = q.size();

treenode temp = null;

int level = 0;

while(!q.isempty())

if(temp.right != null)

size--;

}level++;

}return level;}}

public class dfsdemo 

dfs(root,1);

return max;

}public void dfs(treenode node, int level)

if(node.left != null)

if(node.right != null)}}

public class dfsdemo 

int left = maxdepth(root.left);

int right = maxdepth(root.right);

return math.max(left,right) + 1;}}

深度優先遍歷 和 廣度優先遍歷

圖的廣度優先搜尋是樹的按層次遍歷的推廣,它的基本思想是 首先訪問初始點vi,並將其標記為已訪問過,接著訪問vi的所有未被訪問過的鄰接點 vi1,vi2,vi t,並均標記已訪問過,然後再按照vi1,vi2,vi t的次序,訪問每乙個頂點的所有未被訪問過的鄰接點,並均標記為已訪問過,依次類推,直到圖中...

廣度優先遍歷和深度優先遍歷

深度優先遍歷 廣度優先遍歷是圖的一種遍歷方式,它的思想就是遍歷這個點相鄰的所有的點,再對這些點進行廣度優先遍歷.如下圖所示 首先我們從a點開始遍歷,然後遍歷所有和a相鄰的點f和點g 然後對f和點g進行遍歷進行遍歷,得到點e,h,k和b 然後再繼續,知道所有的點都遍歷完成 首先,我們先定義圖graph...

深度優先遍歷和廣度優先遍歷

其實簡單來說 深度優先就是自上而下的遍歷搜尋 廣度優先則是逐層遍歷 對於演算法來說 無非就是時間換空間 空間換時間 深度優先不需要記住所有的節點,所以占用空間小,而廣度優先需要先記錄所有的節點占用空間大 深度優先有回溯的操作 沒有路走了需要回頭 所以相對而言時間會長一點 深度優先採用的是堆疊的形式,...