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 };

 

posted @ 2020-07-15 16:27  __rookie  阅读(155)  评论(0编辑  收藏  举报