剑指Offer 二叉树中和为某一值的路径(dfs)

题目描述

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
 
 
思路:
递归,然后深搜,因为题目定义的,是从根到叶子节点的才算一条路径,所以,搜索到叶子节点的时候return ,每次把sum-当前节点的值,传给dfs函数。
 
 1 class Solution {
 2 public:
 3     vector<vector<int> > ans;
 4     vector<int> path;
 5     
 6     vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {        
 7         dfs(root,expectNumber);
 8         return ans;
 9     }
10     
11     void dfs(TreeNode* node,int sum)
12     {
13         if(node==NULL)
14             return;
15         path.push_back(node->val);
16         if(!node->left&&!node->right&&sum-node->val==0)
17             ans.push_back(path);
18         else
19         {
20             if(node->left)
21                 dfs(node->left,sum-node->val);
22             if(node->right)
23                 dfs(node->right,sum-node->val);    
24         }
25         path.pop_back();
26         
27     }
28 };
原文地址:https://www.cnblogs.com/SeekHit/p/5909587.html