LeetCode 113:Path Sum II

来源:互联网 发布:青岛工程咨询院 知乎 编辑:程序博客网 时间:2024/05/16 01:53

Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.

For example:
Given the below binary tree and sum = 22,
              5             / \            4   8           /   / \          11  13  4         /  \    / \        7    2  5   1

return

[   [5,4,11,2],   [5,8,4,5]]

Subscribe to see which companies asked this question

 class Solution { public: vector<vector<int>> pathSum(TreeNode* root, int sum) { vector<vector<int>> res; vector<int> tmp; //保存中间结果 tmpFunction(root, sum, tmp, res); return res; } void tmpFunction(TreeNode* root, int sum, vector<int> &tmp, vector<vector<int>>&res){ if (root == NULL) return; tmp.push_back(root->val); if (root->left == NULL && root->right == NULL){ if (root->val == sum) res.push_back(tmp); } tmpFunction(root->left, sum - root->val, tmp, res); tmpFunction(root->right, sum - root->val, tmp, res); tmp.pop_back(); } };

#include<iostream>#include<new>#include<vector>using namespace std;//Definition for binary treestruct 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){vector<vector<int> > path;vector<int> tmp;hasPathSum(root, sum, path, tmp);return path;}void hasPathSum(TreeNode *root, int sum, vector<vector<int> > &path, vector<int> tmp){if (root == NULL)return;tmp.push_back(root->val);if (root->left == NULL&&root->right == NULL && (sum - root->val) == 0){path.push_back(tmp);}if (root->left)hasPathSum(root->left, sum - root->val, path, tmp);if (root->right)hasPathSum(root->right, sum - root->val, path, tmp);tmp.pop_back();}void createTree(TreeNode *&root){int i;cin >> i;if (i != 0){root = new TreeNode(i);if (root == NULL)return;createTree(root->left);createTree(root->right);}}};int main(){Solution s;TreeNode *root;s.createTree(root);vector<vector<int> > path = s.pathSum(root, 22);for (auto a : path){for (auto v : a)cout << v << " ";cout << endl;}system("pause");return 0;}


1 0