LeetCode 112.路径总和
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
解题思路
LeetCode这题相对简单,只需要判断是否存在,注意路径定义为从根节点到叶节点即可。
递归
class Solution:
def hasPathSum(self, root: TreeNode, sum: int) -> bool:
if not root: return False
# 为叶节点的判别条件
if not root.left and not root.right and root.val == sum: return True
return self.hasPathSum(root.left, sum - root.val) or self.hasPathSum(root.right, sum - root.val)
剑指Offer 34.二叉树中和为某一值的路径
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
(注意: 在返回值的list中,数组长度大的数组靠前)
解题思路
这题与上题稍有不同,上题只需要判断是否存在,而这题要返回路径数组。
递归
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def FindPath(self, root, expectNumber):
# 注意这里要返回[],不然后续列表操作会出错
if not root: return []
if not root.left and not root.right and root.val == expectNumber:
return [[root.val]]
res = []
left = self.FindPath(root.left , expectNumber - root.val)
right = self.FindPath(root.right , expectNumber - root.val)
for x in left + right:
res.append([root.val] + x)
return res