题目描述
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
题解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| bool isPath(TreeNode* root, int sum, vector<int>& tmp, vector<vector<int>>& res) { if (!root) { return false; } if (!root->left && !root->right&&root->val == sum) { tmp.push_back(root->val); res.push_back(tmp); tmp.pop_back(); return true; } tmp.push_back(root->val); bool f1 = isPath(root->left, sum - root->val, tmp, res); bool f2 = isPath(root->right, sum - root->val, tmp, res); tmp.pop_back(); return f1 || f2; } vector<vector<int>> pathSum(TreeNode* root, int sum) { vector<vector<int>> res; vector<int> tmp; isPath(root, sum, tmp, res); return res; }
|
效率还不错。注意什么时候压入,什么时候需要弹出。