1.题目描述
输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
样例
给出二叉树如下所示,并给出num=22。 5 / \ 4 6 / / \ 12 13 6 / \ / \ 9 1 5 1 输出:[[5,4,12,1],[5,6,6,5]]
2.解题思路
利用一个path保存中间的路径的值,每次先把根加入,再把左子树的根节点加入,直到叶子节点,如果这个叶子节点不满足条件,则弹出这个节点,退到上一步的根节点,把根节点的右孩子节点加入
3.代码实现
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def dfs(self, root, expectNumber, res, path):
# write code here
if not root:
return
path.append(root.val)
expectNumber = expectNumber - root.val
if not root.left and not root.right and expectNumber==0:
# 注意这里和res.append(path)的区别!!!
res.append(path[:])
# 如果这里加了return,在前面要多一次弹栈 path.pop(-1)
self.dfs(root.left, expectNumber, res, path)
self.dfs(root.right, expectNumber, res, path)
# 注意弹出这个节点
path.pop(-1)
def FindPath(self, root, expectNumber):
res=[]
path=[]
self.dfs(root,expectNumber,res,path)
return res