题目描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
解题思路
- 将当前结点加入路径中,如果当前结点是叶结点,判断至当前结点的路径和是否符合条件,若符合则将路径加入最终结果。
- 每一轮递归返回到父结点时,当前路径也应该回退一个结点。
代码
# -*- 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
# copy code and learn it
if not root: # 节点为空则返回空列表
return []
if not root.left and not root.right and root.val == expectNumber: # 如果节点为叶节点并且输入整数为路径节点之和
return [[root.val]] # 返回包含当前叶节点值的二维列表
res = [] # 重新刷新res为空
left = self.FindPath(root.left, expectNumber - root.val) # 空列表或者包含当前叶节点值的二维列表
right = self.FindPath(root.right, expectNumber - root.val) # 空列表或者包含当前叶节点值的二维列表
for i in left+right: # 若left和right为空则这里的循环不会被运行
res.append([root.val]+i)
return res # 返回最终二维列表或者返回当前节点之下符合条件的所有路径