Leetcode 113. Path Sum II (python+cpp)

tech2022-09-14  111

Leetcode 113. Path Sum II

题目:解法:类似backtracking

题目:

解法:类似backtracking

在path sum I的基础上稍作改动即可

class Solution: def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]: def helper(node,curr_sum,curr_path): if not node: return curr_path.append(node.val) if not node.left and not node.right and curr_sum+node.val==sum: ans.append(curr_path[:]) else: helper(node.left,curr_sum+node.val,curr_path) helper(node.right,curr_sum+node.val,curr_path) curr_path.pop() ans = [] helper(root,0,[]) return ans

C++版本:

class Solution { vector<vector<int>> ans; public: vector<vector<int>> pathSum(TreeNode* root, int sum) { vector<int> curr_path; helper(root,0,curr_path,sum); return ans; } void helper(TreeNode* node, int curr_sum, vector<int> &curr_path,int sum){ if (!node) return; curr_path.push_back(node->val); if (!node->left && !node->right && curr_sum+node->val==sum){ ans.push_back(curr_path); }else{ helper(node->left,curr_sum+node->val,curr_path,sum); helper(node->right,curr_sum+node->val,curr_path,sum); } curr_path.pop_back(); } };

时间复杂度:O(nlogn). 对于每个节点,我们使用类似backtracking这种方式是只需要对每个节点访问一遍就可以的,但问题是还需要考虑将形成的path加入到最终答案的复杂度。每条path的长度应该等于树的深度也就是logn,而总共最多可能存在N/2条路径,所以复杂度是O(nlogn)

最新回复(0)