376. 二叉树的路径和

376. 二叉树的路径和

中文English

给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。

一个有效的路径,指的是从根节点到叶节点的路径。

样例

样例1:

输入:
{1,2,4,2,3}
5
输出: [[1, 2, 2],[1, 4]]
说明:
这棵树如下图所示:
	     1
	    / \
	   2   4
	  / \
	 2   3
对于目标总和为5,很显然1 + 2 + 2 = 1 + 4 = 5

样例2:

输入:
{1,2,4,2,3}
3
输出: []
说明:
这棵树如下图所示:
	     1
	    / \
	   2   4
	  / \
	 2   3
注意到题目要求我们寻找从根节点到叶子节点的路径。
1 + 2 + 2 = 5, 1 + 2 + 3 = 6, 1 + 4 = 5 
这里没有合法的路径满足和等于3.
 
 
输入测试数据 (每行一个参数)如何理解测试数据?

 DFS写法

"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
"""


class Solution:
    """
    @param: root: the root of binary tree
    @param: target: An integer
    @return: all valid paths
    """
    def binaryTreePathSum(self, root, target):
        # write your code here
        
        results = []
        self.dfs(root, results, [], 0, target)
        
        return results 
    
    def dfs(self, root, results, path, sums, target):
        if not root: return
        
        path.append(root.val)
        sums += root.val
        
        #如果要加return的话,需要pop掉一个值,否则path的值除了第一个,后面都是大于target的
        if not root.left and not root.right and sums == target:
            results.append(path[:])
            path.pop()
            return 
            
        self.dfs(root.left, results, path, sums, target)
        self.dfs(root.right, results, path, sums, target)
        #回溯,往回删除,找根节点
        path.pop()
        
        

 

posted @ 2020-08-15 16:13  风不再来  阅读(218)  评论(0编辑  收藏  举报