二叉树中和为某一值的路径
思路:
题目的路径是根节点到叶节点,所以这个整数肯定是足够大的,一定能到叶节点的。
使用深度优先遍历方法,利用栈的思想,先将叶节点放入栈,最后记得弹出,返回父节点。
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 };