题意原来是一定要从根节点一直到叶子结点,不能去中间结点路径
一个可以从根不取到叶子结点的方法(最后序列没有根据长度排序),深度遍历
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def FindPath(self, root, expectNumber):
# write code here
def find(lis,node):
if sum(lis)+node.val==expectNumber:
lis.append(node.val)
result.append(lis)
elif (sum(lis)+node.val<expectNumber):
print('function <',node.val)
if (node.left) or (node.right):
lis.append(node.val)
if node.left:
print('left',lis,node.left.val)
find(lis,node.left)
if node.right:
print('right',lis,node.right.val)
find(lis,node.right)
result = []
if root.val>expectNumber:
return []
elif root.val==expectNumber:
return [[root.val]]
else:
if (not root.left) and (not root.right):
return []
if root.left:
find([root.val],root.left)
if root.right:
find([root.val],root.right)
return result
——————————————————————————————————————
运行时间:27ms
占用内存:5616k
依然是深度遍历(虽然过了,但是最后结果并没有按照长度排序)
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def FindPath(self, root, expectNumber):
# write code here
def find(lis,node):
if (not node.left) and (not node.right) and (sum(lis)+node.val==expectNumber):
result.append(lis+[node.val])
if node.left:
print('left',lis,node.left.val)
find(lis+[node.val],node.left)
if node.right:
print('right',lis,node.right.val)
find(lis+[node.val],node.right)
result = []
if root:
find([],root)
return result