參考:
例項解析
(1)選定乙個未被訪問過的頂點v作為起始頂點(或者訪問指定的起始頂點v),並將其標記為已訪問過;
(2)搜尋與頂點v鄰接的所有頂點,判斷這些頂點是否被訪問過,如果有未被訪問過的頂點,則任選乙個頂點w進行訪問;再選取與頂點w鄰接的未被訪問過的任乙個頂點並進行訪問,依次重複進行。當乙個頂點的所有的鄰接頂點都被訪問過時,則依次回退到最近被訪問的頂點。若該頂點還有其他鄰接頂點未被訪問,則從這些未被訪問的頂點中取出乙個並重複上述過程,直到與起始頂點v相通的所有頂點都被訪問過為止。
(3)若此時圖中依然有頂點未被訪問,則再選取其中乙個頂點作為起始頂點並訪問之,轉(2)。反之,則遍歷結束。
答:常用於樹的遍歷和圖的遍歷,圖的遍歷相對樹而言要更為複雜。因為圖中任意頂點都可能與其他頂點相鄰,所以在圖的遍歷中必須記錄已被訪問的頂點,避免重複訪問。
題目描述:給定一顆根結點為 root 的二叉樹,樹中的每個結點都有乙個從 0 到 25 的值,分別代表字母 『a』 到 『z』:值 0 代表 『a』,值 1 代表 『b』,依此類推。
找出按字典序最小的字串,該字串從這棵樹的乙個葉結點開始,到根結點結束。
(小貼士:字串中任何較短的字首在字典序上都是較小的:例如,在字典序上 「ab」 比 「aba」 要小。葉結點是指沒有子結點的結點。)
示例 :
輸入:[0,1,2,3,4,3,4] 輸出:「dba」
輸入:[25,1,3,1,3,0,2] 輸出:「adz」
解題思路:深度優先搜尋,深度遍歷樹的過程中,每當遍歷到葉子節點的時候,就加入list集合,最後對list集合進行排序,輸出第乙個字串就是最小字串。
注:下面**可左右滑動檢視
class
solution
getleafnodepathstr
(root, sb, list)
; collections.
sort
(list)
; system.out.
println
(list)
;return list.
get(0)
;}public
static
void
getleafnodepathstr
(treenode node, stringbuilder sb, list list)
sb.(nodeval);if
(node.left != null)
if(node.right != null)
}}
題目描述:給定乙個有 n 個節點的二叉樹,每個節點都有乙個不同於其他節點且處於 中的值。通過交換節點的左子節點和右子節點,可以翻轉該二叉樹中的節點。考慮從根節點開始的先序遍歷報告的 n 值序列。將這一 n 值序列稱為樹的行程。我們的目標是翻轉最少的樹中節點,以便樹的行程與給定的行程 voyage 相匹配。
如果可以,則返回翻轉的所有節點的值的列表。你可以按任何順序返回答案。
如果不能,則返回列表 [-1]。
示例 :
輸入:root = [1,2], voyage = [2,1]
輸出:[-1]
輸入:root = [1,2,3], voyage = [1,3,2]
輸出:[1]
快速理解題意:給定乙個先序遍歷序列,給出一棵樹,問能否通過翻轉改樹的某些左右子節點,使得該樹的先序遍歷序列等於給定的先序遍歷序列
解題思路:深度優先搜尋,先序遍歷一下,如果在這個節點的左子節點的值不等於搜尋的下乙個值,但是右子節點的值等於,那麼就翻轉一下,如果兩個子節點的值都不等於,那麼就返回列表 [-1]。
注:下面**可左右滑動檢視
class
solution
return flippath;
}public
intdfs
(treenode root,
int idx, list
flippath,
int[
] voyage)
if(idx >= voyage.length)
if(root.val != voyage[idx]
)int left =
dfs(root.left, idx +
1, flippath, voyage);if
(left !=-1
)//需要翻轉
flippath.
add(root.val)
;int right =
dfs(root.right, idx +
1, flippath, voyage);if
(right !=-1
)return-1;}}
演算法總結 DFS 深度優先搜尋
目錄二 dfs的具體實現 三 剪枝 四 練習 1.什麼是dfs 深度優先搜尋演算法,又稱dfs depth first search dfs演算法是一種搜尋演算法,而搜尋演算法實質上是一種列舉,即借助計算機的高效能來有目的地列舉乙個問題的部分情況或這個問題的所有情況,進而求出問題的解的一種方法。2....
深度優先搜尋總結
深度優先搜尋演算法 英語 depth first search,簡稱dfs 是一種用於遍歷或搜尋樹或圖的演算法。沿著樹的深度遍歷樹的節點,盡可能深的搜尋樹的分支。當節點v的所在邊都己被探尋過,搜尋將回溯到發現節點v的那條邊的起始節點。這一過程一直進行到已發現從源節點可達的所有節點為止。如果還存在未被...
搜尋演算法(深度優先和廣度優先)(待更新 )
深度優先搜尋 dfs 基本思路 從圖中某定點v出發 訪問定點u 依次從u的未被訪問的鄰接點出發,對圖進行深度優先遍歷,直至圖中和v有路徑相通的頂點都被訪問。若此時圖中尚有未被訪問的定點,則從該頂點出發,重新進行深度優先遍歷,直至所有頂點均被訪問過為止。dfs演算法的具體 實現 const int m...