题目描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
# -*- 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
if not root:
return []
result=[]
def FindPathMain(root, path,currentSum):
currentSum+=root.val
path.append(root)
isLeaf=root.left==None and root.right==None
if expectNumber==currentSum and isLeaf:
onePath=[]
for node in path:
onePath.append(node.val)
result.append(onePath)
if expectNumber>currentSum:
if root.left:
FindPathMain(root.left,path, currentSum)
if root.right:
FindPathMain(root.right, path, currentSum)
path.pop()
FindPathMain(root,[],0)
return result
挺复杂的,看了好一阵才想明白。写的时候能犯的错误都犯了。之后复习。
ps:A==None 和not A 之间的联系与区别??
https://www.cnblogs.com/wangzhao2016/p/6763431.html
-----------------------------------------------------------------------------------------------------------------
8.16分隔线
--------------------------------------------------------------------------------------------------------------------
链接:https://www.nowcoder.com/questionTerminal/b736e784e3e34731af99065031301bca
来源:牛客网
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def FindPath(self, root, expectNumber):
res=[]
treepath=self.dfs(root)
for i in treepath:
if sum(map(int,i.split('->')))==expectNumber:
res.append(list(map(int,i.split('->'))))
return res
def dfs(self, root):
if not root: return []
if not root.left and not root.right:
return [str(root.val)]
treePath = [str(root.val) + "->" + path for path in self.dfs(root.left)]
treePath += [str(root.val) + "->" + path for path in self.dfs(root.right)]
return treePath
这个代码更加简单明了,def dfs()作用是找出所有树的路径,Findpath作用是将每个路径加起来看是否等于制定值。
疑问是:1:def dfs()return 几个值?是一个长treePath还是几个短treePath?
2:计算路径和是怎么算的?