mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 19:44:45 +08:00
@ -348,25 +348,29 @@ class Solution {
|
|||||||
```
|
```
|
||||||
|
|
||||||
Python:
|
Python:
|
||||||
|
|
||||||
|
0112.路径总和
|
||||||
```python
|
```python
|
||||||
// 递归法
|
|
||||||
# Definition for a binary tree node.
|
# Definition for a binary tree node.
|
||||||
# class TreeNode:
|
# class TreeNode:
|
||||||
# def __init__(self, val=0, left=None, right=None):
|
# def __init__(self, val=0, left=None, right=None):
|
||||||
# self.val = val
|
# self.val = val
|
||||||
# self.left = left
|
# self.left = left
|
||||||
# self.right = right
|
# self.right = right
|
||||||
|
|
||||||
|
// 递归法
|
||||||
|
|
||||||
class Solution:
|
class Solution:
|
||||||
def hasPathSum(self, root: TreeNode, targetSum: int) -> bool:
|
def hasPathSum(self, root: TreeNode, targetSum: int) -> bool:
|
||||||
def isornot(root,targetSum)->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) and targetSum == 0:return True // 遇到叶子节点,并且计数为0
|
||||||
if (not root.left) and (not root.right):return False //遇到叶子节点,计数不为0
|
if (not root.left) and (not root.right):return False //遇到叶子节点,计数不为0
|
||||||
if root.left:
|
if root.left:
|
||||||
targetSum -= root.left.val //只有左节点
|
targetSum -= root.left.val //左节点
|
||||||
if isornot(root.left,targetSum):return True //递归,处理节点
|
if isornot(root.left,targetSum):return True //递归,处理左节点
|
||||||
targetSum += root.left.val //回溯
|
targetSum += root.left.val //回溯
|
||||||
if root.right:
|
if root.right:
|
||||||
targetSum -= root.right.val //只有右节点
|
targetSum -= root.right.val //右节点
|
||||||
if isornot(root.right,targetSum):return True //递归,处理右节点
|
if isornot(root.right,targetSum):return True //递归,处理右节点
|
||||||
targetSum += root.right.val //回溯
|
targetSum += root.right.val //回溯
|
||||||
return False
|
return False
|
||||||
@ -374,6 +378,46 @@ class Solution:
|
|||||||
if root == None:return False //别忘记处理空TreeNode
|
if root == None:return False //别忘记处理空TreeNode
|
||||||
else:return isornot(root,targetSum-root.val)
|
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:
|
Go:
|
||||||
|
|
||||||
JavaScript:
|
JavaScript:
|
||||||
|
Reference in New Issue
Block a user