2020-07-02
1.題目描述
輸入一棵二叉樹和一個整數,打印出二叉樹中節點值的和爲輸入整數的所有路徑。從樹的根節點開始
往下一直到葉節點所經過的節點形成一條路徑。
2.題解
深度優先搜索:進行回溯的時候要恢復vector的狀態
3.代碼
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> pathSum(TreeNode* root, int sum) {
if (!root) return vector<vector<int>>(0);
vector<int> tmp;
tmp.push_back(root->val);
dfs(root,tmp,root->val,sum);
return res;
}
void dfs(TreeNode* node,vector<int> vec,int sumnow,int sum){
if (!node->left&&!node->right){
if (sumnow==sum){
res.push_back(vec);
}
return ;
}
if (node->left){
int tmp=node->left->val;
vec.push_back(tmp);
dfs(node->left,vec,sumnow+tmp,sum);
vec.pop_back();
}
if (node->right){
int tmp=node->right->val;
vec.push_back(tmp);
dfs(node->right,vec,sumnow+tmp,sum);
vec.pop_back();
}
}
vector<vector<int>> res;
};