給定乙個二叉樹和乙個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。說明: 葉子節點是指沒有子節點的節點。
示例:給定如下二叉樹,以及目標和 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預設採用的是深度優先演算法 這裡是深...