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

思路:

题目的路径是根节点到叶节点,所以这个整数肯定是足够大的,一定能到叶节点的。

使用深度优先遍历方法,利用栈的思想,先将叶节点放入栈,最后记得弹出,返回父节点。

 1 /*
 2 struct TreeNode {
 3     int val;
 4     struct TreeNode *left;
 5     struct TreeNode *right;
 6     TreeNode(int x) :
 7             val(x), left(NULL), right(NULL) {
 8     }
 9 };*/
10 class Solution {
11 public:
12     vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
13         //先排除了空节点的情况
14         if(!root) return res;
15         dfs(root,expectNumber);
16         return res;
17     }
18     //深度优先遍历
19     void dfs(TreeNode* root,int num){
20         path.push_back(root->val);
21         //已经到了叶子节点了,返回路径
22         if(root->val==num && !root->left && !root->right) res.push_back(path);
23         //没到叶子节点
24         if(root->val!=num && root->left) dfs(root->left,num-root->val);
25         if(root->val!=num && root->right) dfs(root->right,num-root->val);
26         //将最后一层的左叶节点pop出去,返回父节点,遍历右子节点
27         path.pop_back();
28     }
29 private:
30     vector<vector<int> > res;
31     vector<int> path;
32 };

 

posted @ 2019-07-09 11:01  Austin_anheqiao  阅读(164)  评论(0编辑  收藏  举报