求二叉樹中和為給定值的路徑
阿新 • • 發佈:2018-12-31
題目:輸入一棵二叉樹和一個整數,打印出二叉樹中節點值的和為輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。
如圖,輸入上圖的二叉樹和整數 22,則打印出兩條路徑,第一條路徑:10, 12; 第二條路徑為:10, 5, 7.
/** * 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{ vector<vector<int> > res; void helper(TreeNode *root,int left,vector<int> &base){ if(!root->left&&!root->right){ if(root->val==left){ base.push_back(root->val); res.push_back(base); base.pop_back(); } return ; } if(root->left){ base.push_back(root->val); helper(root->left, left-root->val,base); base.pop_back(); } if(root->right){ base.push_back(root->val); helper(root->right,left-root->val,base); base.pop_back(); } } public: vector<vector<int>> pathSum(TreeNode* root, int sum) { if(!root) return res; vector<int> base; helper(root,sum,base); return res; } };