给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。
第一次的代码:
设置列表l保存路径节点的值,当递归到叶节点时,计算路径和是否与sum匹配,否则返回False。
def sum1(x):#设置求和函数sum1
c=0
for i in x:
c=c+i
return c
def h(r,l):
l=l+[r.val]#l#添加当前节点值
if not r.left and not r.right:#是否叶子
if sum1(l)==sum:#是否匹配
return True
else:
return False
if r.left and h(r.left,l):#递归左树
return True
if r.right and h(r.right,l):
return True
return False#左右树都不满足
if not root :
return False
return h(root,[])
64ms,排名93%
做减法要更快一些:
av=[]
def c(r,v,l):
if v==0 and not r.left and not r.right:
av.append(l)
if r.left :
c(r.left,v-r.left.val,l+[r.left.val])
if r.right:
c(r.right,v-r.right.val,l+[r.right.val])
if not root :
return av
c(root,sum-root.val,[root.val])
return av