LeetCode113 路径总和
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
递归就可以,但还是要注意一个是不能地轨道nullptr,否则一个叶子节点会添加两次;而且要注意传引用,提高效率。
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 private: 12 vector<vector<int>> ret; 13 public: 14 vector<vector<int>> pathSum(TreeNode* root, int sum) { 15 if(root==nullptr) 16 return {}; 17 ret.clear(); 18 int cursum=0; 19 vector<int> temp; 20 recursive_find(root,cursum,sum,temp); 21 return ret; 22 } 23 24 void recursive_find(TreeNode* pNode, int& cursum, int& aim,vector<int>& temp){ 25 if(pNode->left==nullptr && pNode->right==nullptr){ 26 if(cursum+pNode->val==aim){ 27 temp.push_back(pNode->val); 28 ret.push_back(temp); 29 temp.pop_back(); 30 } 31 return; 32 } 33 cursum+=pNode->val; 34 temp.push_back(pNode->val); 35 if(pNode->left!=nullptr) 36 recursive_find(pNode->left,cursum,aim,temp); 37 if(pNode->right!=nullptr) 38 recursive_find(pNode->right,cursum,aim,temp); 39 temp.pop_back(); 40 cursum-=pNode->val; 41 return ; 42 } 43 };