LeetCode: 113 路径求和II
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
python 知识点:
[]+[3] = [3]
[3] + [4,5] = [3,4,5]
定义并创建二叉树:
# Definition for a binary tree node.
from typing import List
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def Create_tree(root,nums:List[int],i):
if i<len(nums):
if not nums[i]: return None
else:
root=TreeNode(nums[i])
root.left=Create_tree(root.left,nums,i*2+1)
root.right=Create_tree(root.right,nums,i*2+2)
return root
return root
递归实现:
class Solution:
def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
res=[]
if not root: return res
def helper(root,sum,temp):
if not root: return None
if not root.left and not root.right and sum-root.val==0:
temp += [root.val]
res.append(temp)
return
else:
helper(root.left,sum-root.val,temp+[root.val])
helper(root.right,sum-root.val,temp+[root.val])
helper(root,sum,[])
return res
测试代码:
if __name__ =="__main__":
s = Solution()
nums=[5,4,8,11,None,13,4,7,2,None,None,None,None,5,1]
root = Create_tree(None,nums,0)
# print(Ceng_tree(root))
sum=22
r = s.pathSum(root,sum)
print(r)