diff --git a/problems/0112.路径总和.md b/problems/0112.路径总和.md index e11384da..5ecdf350 100644 --- a/problems/0112.路径总和.md +++ b/problems/0112.路径总和.md @@ -348,25 +348,29 @@ class Solution { ``` Python: + +0112.路径总和 ```python -// 递归法 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right + +// 递归法 + class Solution: def hasPathSum(self, root: TreeNode, targetSum: int) -> bool: def isornot(root,targetSum)->bool: if (not root.left) and (not root.right) and targetSum == 0:return True // 遇到叶子节点,并且计数为0 if (not root.left) and (not root.right):return False //遇到叶子节点,计数不为0 if root.left: - targetSum -= root.left.val //只有左节点 - if isornot(root.left,targetSum):return True //递归,处理节点 + targetSum -= root.left.val //左节点 + if isornot(root.left,targetSum):return True //递归,处理左节点 targetSum += root.left.val //回溯 if root.right: - targetSum -= root.right.val //只有右节点 + targetSum -= root.right.val //右节点 if isornot(root.right,targetSum):return True //递归,处理右节点 targetSum += root.right.val //回溯 return False @@ -374,6 +378,46 @@ class Solution: if root == None:return False //别忘记处理空TreeNode else:return isornot(root,targetSum-root.val) ``` + +0113.路径总和-ii +```python +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +//递归法 +class Solution: + def pathSum(self, root: TreeNode, targetSum: int) -> List[List[int]]: + path=[] + res=[] + def pathes(root,targetSum): + if (not root.left) and (not root.right) and targetSum == 0: // 遇到叶子节点,并且计数为0 + res.append(path[:]) //找到一种路径,记录到res中,注意必须是path[:]而不是path + return + if (not root.left) and (not root.right):return // 遇到叶子节点直接返回 + if root.left: //左 + targetSum -= root.left.val + path.append(root.left.val) //递归前记录节点 + pathes(root.left,targetSum) //递归 + targetSum += root.left.val //回溯 + path.pop() //回溯 + if root.right: //右 + targetSum -= root.right.val + path.append(root.right.val) //递归前记录节点 + pathes(root.right,targetSum) //递归 + targetSum += root.right.val //回溯 + path.pop() //回溯 + return + + if root == None:return [] //处理空TreeNode + else: + path.append(root.val) //首先处理根节点 + pathes(root,targetSum-root.val) + return res +``` + Go: JavaScript: