24 二叉树中和为某一值的路径

 1 //题目:二叉树中和为某一值的路径
 2 //输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
 3 //看见二叉树,二话不说,先写树的结点定义
 4 //思路:注意这道题的递归,在递归的时候没有对其定义返回值;也就是说并不是每个递归函数都要考虑其返回值,只有当需要根据递归函数做判断结果时,才定义返回值
 5 struct TreeNode
 6 {
 7     int val;
 8     struct TreeNode* left;
 9     struct TreeNode* right;
10     TreeNode(int x):val(x), left(NULL), right(NULL){}
11 };
12 class Solution 
13 {
14 public:
15     vector<vector<int> > FindPath(TreeNode* root,int expectNumber) 
16     {
17         if (root != NULL && expectNumber >0)
18         {
19             
20             currentSum += root->val;
21             //每遍历一个结点,就要将其放入栈中
22             tmpStack.push_back(root->val);
23             if (root->left == NULL && root->right == NULL)
24             {
25                 if (currentSum == expectNumber)
26                 {
27                     result.push_back(tmpStack);
28                 }
29             }
30             if (root->left != NULL)
31             {
32                 FindPath(root->left, expectNumber);
33             }
34             if (root->right != NULL)
35             {
36                 FindPath(root->right, expectNumber);
37             }
38             currentSum -= root->val;//这个情况是==遍历到了叶子结点且到了叶子结点也不能满足currentSum == expectNumber,故就要将其删除,然后返回,查询其父节点的右子结点。
39             tmpStack.pop_back();
40         }
41         return result;
42     }
43 public:
44     vector<vector<int>> result;
45     vector<int> tmpStack;
46     int currentSum = 0;
47 };

 

posted @ 2017-08-25 09:45  繁星的夜空2012  阅读(109)  评论(0编辑  收藏  举报