Leetcode---113. 路徑總和 II
給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定如下二叉樹,以及目標和 sum = 22
,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
這道題,學到了,真的是學到了,直接把路徑總和lll 也AC了,hahaha.
一開始,想不通這個路徑該怎麼儲存,可以由一個 vector<int> t 和一個 vector<vector<int>> s 來實現路徑的儲存。
思路:遞迴到葉子節點,並判斷這是是否和之前的和為sum,如果等於,直接s.push_back(t); 實現這條路的儲存。
再將最後進入的彈出:t.pop_back() 最後路徑的條數為s.size(),並且路徑都在容器s中。
AC:
class Solution {
public:
vector<vector<int>> s;
vector<int> t;
void fun(TreeNode* root,int sum) //這裡的函式不需要返回,因為結果都在s中,s是全域性變數。
{
if (root==NULL)
return ;
t.push_back(root->val);
if (root->val==sum&&root->left==NULL&&root->right==NULL)
{
s.push_back(t);
}
fun(root->left,sum-root->val);
fun(root->right,sum-root->val);
t.pop_back(); //將最近push()進的葉子節點彈出,實現換路。
}
vector<vector<int>> pathSum(TreeNode* root, int sum) {
fun(root,sum);
return s;
}
};
這道題真挺好的,學到了很多,666666666送給我自己,hahahhaaha(來自菜鳥的欣喜).
容器真是個好東西,得好好看看。