From b7b1fba255c94083b9f4ea0e052d5b519461f785 Mon Sep 17 00:00:00 2001 From: ShusenTang Date: Fri, 7 Feb 2020 10:52:28 +0800 Subject: [PATCH] update 113 --- solutions/113. Path Sum II.md | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/solutions/113. Path Sum II.md b/solutions/113. Path Sum II.md index 22d48b2..e3bd326 100644 --- a/solutions/113. Path Sum II.md +++ b/solutions/113. Path Sum II.md @@ -5,6 +5,8 @@ 满足和为sum,即可将path加入到结果二维数组res中。 注:实现的时候我们可以将path和res设置成全局的,免得传参。 +相当于遍历一遍二叉树,所以时空复杂度均为O(n) + # C++ ``` C++ class Solution { @@ -12,24 +14,20 @@ private: vectorpath; vector>res; void helper(TreeNode *root, int sum){ - if(root == NULL) return; - if(root -> val == sum && (!root->left) && (!root -> right)){ // 满足条件 - path.push_back(root -> val); - res.push_back(path); - path.pop_back(); - return; - } path.push_back(root -> val); sum -= root -> val; - helper(root -> left, sum); - helper(root -> right, sum); - path.pop_back(); // 注意离开前要将当前节点移除 + if((!root->left) && (!root -> right) && 0 == sum) res.push_back(path); + else{ + if(root -> left) helper(root -> left, sum); + if(root -> right) helper(root -> right, sum); + } + // 返回父节点之前要删除路径上的当前节点 + path.pop_back(); } public: vector> pathSum(TreeNode* root, int sum) { - path.clear(); - res.clear(); - helper(root, sum); + path.clear(); res.clear(); + if(root) helper(root, sum); return res; } };