路徑總和II 深度優先與廣度優先的實踐

2021-10-14 05:59:15 字數 1254 閱讀 3205

給定乙個二叉樹和乙個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。說明: 葉子節點是指沒有子節點的節點。

示例:給定如下二叉樹,以及目標和 sum = 22,

注意到本題的要求是,找到所有滿足從「根節點」到某個「葉子節點」經過的路徑上的節點之和等於目標和的路徑。核心思想是對樹進行一次遍歷,在遍歷時記錄從根節點到當前節點的路徑和,以防止重複計算。

2.1深度優先搜尋

我們可以採用深度優先搜尋的方式,列舉每一條從根節點到葉子節點的路徑。當我們遍歷到葉子節點,且此時路徑和恰為目標和時,我們就找到了一條滿足條件的路徑。

class solution 

path.emplace_back(root->val);

sum -= root->val;

if (root->left == nullptr && root->right == nullptr && sum == 0)

dfs(root->left, sum);

dfs(root->right, sum);

path.pop_back();

}vector> pathsum(treenode* root, int sum)

};

2.2廣度優先搜尋

我們也可以採用廣度優先搜尋的方式,遍歷這棵樹。當我們遍歷到葉子節點,且此時路徑和恰為目標和時,我們就找到了一條滿足條件的路徑。

為了節省空間,我們使用雜湊表記錄樹中的每乙個節點的父節點。每次找到乙個滿足條件的節點,我們就從該節點出發不斷向父節點迭代,即可還原出從根節點到當前節點的路徑。

class solution 

reverse(tmp.begin(), tmp.end());

ret.emplace_back(tmp);

}vector> pathsum(treenode* root, int sum)

queueque_node;

queueque_sum;

que_node.emplace(root);

que_sum.emplace(0);

while (!que_node.empty())

} else

if (node->right != nullptr) }}

return ret;}};

參考:

深度優先 廣度優先

父類定義 class people def init self,name,age,weight self.name name self.age age self.weight weight defspeak self print s 說 我 d 歲。self.name,self.age 單繼承示例 ...

遍歷 廣度優先與深度優先

第一步,建立佇列,元素操作規則為 佇列尾部加入元素,頭部移除元素 第二步,把資料夾加入該佇列 第三步,從該佇列頭移除資料夾,同時依次遍歷它的所有孩子,如果孩子是檔案,則提取 如果孩子是資料夾,則加入佇列尾部 第四步,重複第三步 直到隊列為空為止。到此資料夾中所有檔案都被獲取 獲取資料夾下所有檔案 p...

深度優先和廣度優先

在爬蟲系統中,待抓取url佇列是很重要的一部分,待抓取url佇列中的url以什麼樣的順序排隊列也是乙個很重要的問題,因為這涉及到先抓取哪個頁面,後抓取哪個頁面。而決定這些url排列順序的方法,叫做抓取策略。下面是常用的兩種策略 深度優先 廣度優先 注 scrapy預設採用的是深度優先演算法 這裡是深...