leecode 解题总结:113. Path Sum II
2017-02-15 14:06
337 查看
#include <iostream> #include <stdio.h> #include <vector> using namespace std; /* 问题: 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] ] 分析:这和之前的要求不一样,需要输出从根节点到叶节点的值,我们可以用一个数组存储结点的值。 具体做法如下:存储当前结点的值到数组中,如果当前结点是叶子结点,计算数组中所有元素的和 是否等于给定值,如果等于,就将数组存储到结果集中;否则,表明当前叶子结点所有值不符合, 从数组中弹出当前叶子结点的值, 关键: 1 //注意result不能用引用,会改变另一条路径的值 void dfs(TreeNode* root , int sum , vector<int> result , vector< vector<int> >& results) */ struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { public: //注意result不能用引用,会改变另一条路径的值 void dfs(TreeNode* root , int sum , vector<int> result , vector< vector<int> >& results) { //当前结点为空,肯定不可能,直接返回 if(!root) { return ; } result.push_back(root->val); sum -= root->val; //如果当前结点为叶子结点,计算结果 if(NULL == root->left && NULL == root->right) { //如果符合要求 if(0 == sum) { results.push_back(result); } //不符合要求,需要弹出当前结点对应的值 else { result.pop_back(); } } //如果当前结点的左孩子不空,递归处理 if(root->left) { dfs(root->left , sum , result , results); } if(root->right) { dfs(root->right , sum , result , results); } } vector<vector<int>> pathSum(TreeNode* root, int sum) { vector<vector<int>> results; vector<int> result; dfs(root , sum , result , results); return results; } }; void print(vector<int>& result) { if(result.empty()) { cout << "no result" << endl; return; } int size = result.size(); for(int i = 0 ; i < size ; i++) { cout << result.at(i) << " " ; } cout << endl; } void process() { vector<int> nums; int value; int num; Solution solution; vector<int> result; while(cin >> num ) { nums.clear(); for(int i = 0 ; i < num ; i++) { cin >> value; nums.push_back(value); } } } int main(int argc , char* argv[]) { process(); getchar(); return 0; }
相关文章推荐
- leecode 解题总结:124. Binary Tree Maximum Path Sum
- leecode 解题总结:40 Combination Sum II
- leetocode Path Sum II 2.21 难度系数2
- leecode 解题总结:126. Word Ladder II
- leecode 解题总结:304. Range Sum Query 2D - Immutable
- leecode 解题总结:264. Ugly Number II
- leecode 解题总结:122. Best Time to Buy and Sell Stock II
- leetcode 113. Path Sum II (路径和) 解题思路和方法
- [leetcode] 113. Path Sum II 解题报告
- leetcode 113. Path Sum II (路径和) 解题思路和方法
- leecode 解题总结:45. Jump Game II
- leecode 解题总结:142. Linked List Cycle II
- leecode 解题总结:140. Word Break II
- leecode 解题总结:92. Reverse Linked List II
- leecode 解题总结:132. Palindrome Partitioning II
- 【LeetCode】113.Path Sum II(Medium)解题报告
- leecode 解题总结:307. Range Sum Query - Mutable
- leecode 每日解题思路 64 Minimum Path Sum
- leecode 解题总结:129. Sum Root to Leaf Numbers
- leecode 解题总结:209. Minimum Size Subarray Sum